我在头文件中声明了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...
};
答案 0 :(得分:0)
模板函数的定义也必须在头文件中。 (此规则的唯一例外是模板仅在一个编译单元中实例化;在这种情况下,您可以将定义放在同一个源中。)。因此,请将实施移出.cpp
并进入标题。
您在类声明中的写作STDMETHODIMP
看起来也很可疑(并且可能是即时错误的来源)。你确定不存在你应该在那里使用的另一个宏STDMETHOD
吗?