我正在寻找一个非类型模板类,其成员变量取决于非类型参数(特别是固定维度的特征矩阵,但问题也存在int
)。为了让事情更清楚,我对成员类型进行了 typedef,这很好,直到我想要一个成员函数返回typedef,此时我开始收到以下错误:
myClass.cpp:10: 错误: 'myClass' 之前的预期构造函数、析构函数或类型转换</p>
我理解,至少在概念上,这与我的 typedef 依赖于模板这一事实有关,因此 C++ 被混淆了。问题是我更加困惑,我尝试了一些天真的插入typename
,但这并没有解决任何问题。
一个最小的工作示例。
标题:
template <int i> class myClass
{
public:
typedef int myVector_t;
myClass();
myVector_t myFunc();
};
源代码:
#include <myClass.hpp>
template <int i>
myClass<i>::myClass()
{
//blah
}
template <int i>
myClass<i>::myVector_t myClass<i>::myFunc() //<----- Line 10
{
//blah
}
我会很感激任何见解。
编辑:回答
如下所述,解决方案是typename
在实现中包含关键字,而不是声明。
typename myClass<i>::myVector_t myClass<i>::myFunc() //<----- Line 10
编辑2
将问题从 Eigen 中概括出来