我是这样用的.
H 文件:
template<class LIST_TYPE>
class CCmdList
{
public:
LIST_TYPE *m_pList;
public:
CCmdList();
virtual ~CCmdList();
public:
BOOL Move(CSNGraph* pStatic,int n);
BOOL DeleteObj(CSNGraph* pObj);
BOOL ChangeProp(CSNGraph* pObj,CBCGPProp* pProp);
BOOL CanUndo(){ if(m_curpos==NULL)
return FALSE;
return TRUE;};
BOOL CanRedo();
BOOL AddObj(CSNGraph* pObj);
BOOL OnRectChanged(CSNGraph* pStatic,const CRect oldrect);
void SetList(LIST_TYPE* plist);
CCmd* Redo();
CCmd* Undo();
private:
void Test();
void ClearOper();
BOOL Do(CCmd* pcmd);
BOOL AddObj(DRAW_TYPE type,const CRect& rect);
POSITION GetRedoPos();
void RemoveRedoItem();
};
在CPP中是这样的.
template<class LIST_TYPE>
CCmdList<LIST_TYPE>::CCmdList()
{
...
}
...
情况就是只要是在类外部被调用到的函数都不能正常链接.但如果把实现放到H文件中,则可以.
H 文件:
template<class LIST_TYPE>
class CCmdList
{
public:
LIST_TYPE *m_pList;
public:
CCmdList();
virtual ~CCmdList();
public:
BOOL Move(CSNGraph* pStatic,int n);
BOOL DeleteObj(CSNGraph* pObj);
BOOL ChangeProp(CSNGraph* pObj,CBCGPProp* pProp);
BOOL CanUndo(){ if(m_curpos==NULL)
return FALSE;
return TRUE;};
BOOL CanRedo();
BOOL AddObj(CSNGraph* pObj);
BOOL OnRectChanged(CSNGraph* pStatic,const CRect oldrect);
void SetList(LIST_TYPE* plist);
CCmd* Redo();
CCmd* Undo();
private:
void Test();
void ClearOper();
BOOL Do(CCmd* pcmd);
BOOL AddObj(DRAW_TYPE type,const CRect& rect);
POSITION GetRedoPos();
void RemoveRedoItem();
};
在CPP中是这样的.
template<class LIST_TYPE>
CCmdList<LIST_TYPE>::CCmdList()
{
...
}
...
情况就是只要是在类外部被调用到的函数都不能正常链接.但如果把实现放到H文件中,则可以.
解决方案 »
- 在对话框中调用另一个程序
- VC2005能通过DllMain函数得到当前DLL的模块句柄么?
- 如何用windows api获取本机ip(不急)?
- vb调用vc制作的dll程序的问题
- 请高人写个 ftp里指定文件下载文件的例子
- VC++欢迎页
- 程序异常
- 怎样得知电脑闲置了一定时间?
- msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
- 200分求教,SDI中拆分窗口的问题,很有价值哦~```(分数不够另开贴子给)进来看看
- 不好意思,我又来了,这回这个应该简单!
- 返回GDI+的Bitmap的屏幕捕捉方法和问题
VC6.0的编译器还不支持这种生明和实现分离的风格的摸班代码。
VC6.0编译器要求函数的生命和实现在一起。这个问题是微软公布的,
如:
template <class Type> class myt
{
public:
myt()
{
//实现代码
}
~myt()
{
//实现代码
}
private:
Type data;
}