关于afxtempl.h文件

 

axftmp1.h是收集类模板(MFC模板类)的头文件,倘若你在程序中用到了CArray, CObList等数据结构时,那么就得加载该文件。通常在MFC编程中,为了使用集合、数组类,要在StdAfx.h中加入下面语句:

#include <afxtempl.h>

那么如何在win32 console程序中使用MFC模板类呢?编译器环境该如何设置呢?这里以VC++ 6.0 为例介绍其使用方法。先看下面一段程序:

#include "afxtempl.h"

class CAction : public CObject

{

public:

       CAction(int nTime)

       {

              m_nTime = nTime;

       }

       void PrintTime() { TRACE("time = %d /n", m_nTime);}

private:

       int m_nTime;

};

int main()

{

       CAction* pAction;

       CObList actionList;

       for (int i = 0; i < 5; i ++)

       {

              pAction = new CAction(i);

              actionList.AddTail(pAction);

       }

       while (!actionList.IsEmpty())

       {

              pAction = (CAction*) actionList.RemoveHead();

              pAction->PrintTime();

              delete pAction;

       }

       return 0;

}

这里有必要介绍一下CObList类的特性。CObListMFC集合类的一种(另一种是CPtrList),能够支持指向CObject派生类对象的指针列表。上面程序中的CAction类就是派生自CObjectCObList的一个很重要的特性就是可以包含混合的指针,换句话说,一个CObList既可以包含CStudent对象的指针,也可以包含CTeacher对象的指针,前提是他们都是派生自CObject。这种特性有时候在实际应用中非常有用,例如前段时间我在写Ray Tracing算法时,场景中的各类物体都可以包含在此数据结构中。

上面的程序我们用默认的编译器设置就会出现编译或链接错:

Compiling...

Command line warning D4002 : ignoring unknown option '/'

file.cpp

Linking...

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex

Debug/win32console6.exe : fatal error LNK1120: 2 unresolved externals

Error executing link.exe.

win32console6.exe - 3 error(s), 1 warning(s)

针对这种情况,侯俊杰的《深入浅出MFC》(第二版)P37给出了解释:在MFC console程序中一定要指定多线程的C runtime 函数库,所以必须使用/MT选项。即在6.0编译器下的具体设置:

project settings dialogà C/C++tab à category: select code generationà use run-time library : select multithreaded or debug multithreaded.

 

参考书籍:

Visual C++ .NET技术内幕》(第6版)()George Shepherd, David Kruglinski

《深入浅出MFC》(第2版)侯俊杰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值