我正在寻找创建一个非类型的模板化类,其成员变量依赖于非类型参数(特别是固定维度的特征矩阵,但问题也出现在int
中)。为了使事情更清楚,我输入了成员类型,这非常有效,直到我想要一个成员函数返回 typedef,此时我开始收到以下错误:
myClass.cpp:10:错误:'myClass'之前的预期构造函数,析构函数或类型转换
至少在概念上我理解这与我的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
将问题从特征
推广出来答案 0 :(得分:5)
由于函数定义中的名称myVector_t
实际上取决于模板参数,因此您需要让编译器知道它是typename
的类型:
template <int i>
typename myClass<i>::myVector_t myClass<i>::myFunc() //<----- Line 10
{
//blah
}