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

Strange error in templated constructor

本文关键字:错误 构造函数      更新时间:2023-10-16

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

#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'

由于这个类从来没有实例化过(main()是空的),我认为编译器甚至根本看不到函数模板,所以我对这个表达式中怎么会有错误感到非常困惑?

你必须使用template关键字:

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