3

我正在寻找一个非类型模板类,其成员变量取决于非类型参数(特别是固定维度的特征矩阵,但问题也存在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 中概括出来

4

1 回答 1

5

由于myVector_t函数定义中的名称实际上取决于模板参数,因此您需要让编译器知道它是一个类型typename

template <int i>
typename myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10
{
  //blah
}
于 2013-07-31T20:15:33.307 回答