【发布时间】:2014-06-25 00:40:20
【问题描述】:
考虑以下代码:
class Bar;
enum Values
{
ValA,
ValB, // ...
};
template< typename T >
struct Foo : virtual public Bar
{
};
template<>
struct Foo< ValA >
{
void doSomething();
};
如果我在头文件中定义doSomething()的实现,当我使用Foo::doSomething()时程序不会报错。但是,如果我将实现移动到一个 cpp 文件,如下所示,我得到一个错误:
template<>
void Foo< ValA >::doSomething()
{
// ...
}
错误:
error: template-id 'doSomething<>' for 'void Foo<(Values)0u>::doSomething()' does not match any template declaration.
我不确定为什么会失败。我相信将专门的实现移动到 cpp 文件应该不是问题。我以前做过。
【问题讨论】:
-
Foo< ValA >不是模板。它(只是)一堂课。删除template<>。
标签: c++ templates constructor virtual