模板化构造函数中的奇怪错误

时间:2016-02-11 20:44:35

标签: c++ templates eigen eigen3

尝试在模板化构造函数中转换参数时,我遇到了一个奇怪的编译器错误。这是一个最小的例子:

site_downloads

错误是:

#include <Eigen/Dense>

class Plane
{
public:
    template <typename TVector>
    Plane(const TVector& coefficients) {
        coefficients.cast<double>(); // compiler error on this line
    }

// This compiles fine
//    Plane(const Eigen::Vector3d& coefficients) {
//        coefficients.cast<double>();
//    }
};

int main(){return 0;}

由于这个类从未实例化(expected primary-expression before 'double' expected ';' before 'double' 为空),我认为编译器甚至根本看不到函数模板,所以我很困惑这个错误是怎么回事表达

1 个答案:

答案 0 :(得分:2)

您必须使用template关键字:

template <typename TVector>
Plane(const TVector& coefficients) {
    coefficients.template cast<double>();
}