在VC6里,添加一个新的CLASS可以右击当前工程,选new class,然后VC6会自动生成类定义和类实现。现在,我想添加一个模板,我该怎么做?我手工在某个现有的类的.h文件里书写模板的定义,在.cpp文件里写模板的实现。链接报错Link2001。
把模板的实现搬到.h文件里后,才能编译链接都通过。但我想模板实现放在.cpp文件里,我该如何做?如何添加一个模板就象添加一个新class那样?

解决方案 »

  1.   

    这个是VC6的局限,还是把模板类的定义和实现都放在.h文件中吧!
      

  2.   

    因为如果放在.cpp里面,编译的时候,编译器不知道你的模版类会被用什么class来实现。举例来说,你在xxx.cpp使用这么个类:
    CMyClass<int> myc;
    在你的MyClass.cpp中,编译器不知道你要用int来实例化,所以就没有为 CMyClass<int>生成代码。所以连接器就无法连接,找不到CMyClass<int>
    顺便说一下,这是 编译 - 链接 机制固有的局限,而不仅仅是vc6的
      

  3.   

    vs.net2003也是这样的
    我还以为自己有什么地方没有写对呢
      

  4.   

    template <class _T, class _xInterface, const IID* piid, const GUID* plibid>
    class ATL_NO_VTABLE IzhpCOMCommonImpl :
    public IDispatchImpl<_xInterface, piid, plibid>
    {
    ...........template <class _T, class _xInterface, const IID* piid, const GUID* plibid>
    STDMETHODIMP IzhpCOMCommonImpl<_T, _xInterface, piid, plibid>::get_ErrDescription(BSTR *pVal)
    {
    // TODO: Add your implementation code here
    *pVal = _bstr_t(mErrDescription).copy();
    return S_OK;
    }.............
      

  5.   


    哎,挣点分数不容易:去看<C++ Templates   The complete Guide> (中文名 C++ Templete全览), 侯捷/荣耀/江洪 译,电子档在侯捷网站有下。(jjhou.csdn.net)看6.1.1 节,说得很清楚了。