模板化构造函数中的奇怪错误
Strange error in templated constructor
尝试在模板化构造函数中转换参数时出现奇怪的编译器错误。这是一个最小的例子:
#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'
因为这个 class 从未被实例化(main()
是空的),我认为编译器根本不会看到函数模板,所以我很困惑如何这个表达式有错误吗?
您必须使用 template
关键字:
template <typename TVector>
Plane(const TVector& coefficients) {
coefficients.template cast<double>();
}
尝试在模板化构造函数中转换参数时出现奇怪的编译器错误。这是一个最小的例子:
#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'
因为这个 class 从未被实例化(main()
是空的),我认为编译器根本不会看到函数模板,所以我很困惑如何这个表达式有错误吗?
您必须使用 template
关键字:
template <typename TVector>
Plane(const TVector& coefficients) {
coefficients.template cast<double>();
}