我是这样用的.
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文件中,则可以.

解决方案 »

  1.   

    vc6不支持模板分开实现,要在一个h文件才行:)
      

  2.   

    同意楼上:
    VC6.0的编译器还不支持这种生明和实现分离的风格的摸班代码。
    VC6.0编译器要求函数的生命和实现在一起。这个问题是微软公布的,
    如:
    template <class Type> class myt
    {
    public:
         myt()
         {
           //实现代码
         }
         ~myt()
         {
           //实现代码
         }
    private:
        Type data;
    }