在CPP文件中实现的C ++模板错误(Visual Studio)

时间:2014-12-05 14:41:49

标签: c++ windows visual-studio templates inheritance

我在头文件中声明了C ++类定义,如下所示:

template <class T>
class MyClass : public T
{

public:

    STDMETHODIMP myMethod();

};

.cpp中的实现是:

template <class T>
STDMETHODIMP MyClass<T>::myMethod() {
// Implementation...
}

编译器(Visual Studio)抱怨方法实现,说“使用了时间错误:忽略了数据上的修饰符”以及“无法识别的模板声明/定义”。

任何想法出了什么问题?

编辑:

错误可能在这里吗?

我正在尝试扩展MyClass,所以我宣布

class ChildClass : MyClass<SomeConcreteClass>
{
// Stuff...
};

1 个答案:

答案 0 :(得分:0)

  1. 模板函数的定义也必须在头文件中。 (此规则的唯一例外是模板仅在一个编译单元中实例化;在这种情况下,您可以将定义放在同一个源中。)。因此,请将实施移出.cpp并进入标题。

  2. 您在类声明中的写作STDMETHODIMP看起来也很可疑(并且可能是即时错误的来源)。你确定不存在你应该在那里使用的另一个宏STDMETHOD吗?