【发布时间】:2017-07-19 07:24:57
【问题描述】:
我正在编译一个使用 C++ 数学库 Eigen3 的 C++ 库。但是,以下代码在使用 VC2013 编译时会引入一些语法错误:
template <typename Derived>
inline Eigen::Transform<typename Derived::Scalar, 3, Eigen::Isometry> v2t(const Eigen::MatrixBase<Derived>& x_) {
Eigen::Transform<typename Derived::Scalar, 3, Eigen::Isometry> X;
Eigen::Matrix<typename Derived::Scalar, 6, 1> x(x_);
X.template linear() = quat2mat(x.template block<3,1>(3,0));
X.template translation() = x.template block<3,1>(0,0);
return X;
}
错误信息如下:
Error C2059 syntax error : 'template'
Error C2039 'X' : is not a member of 'Eigen::Transform<float,3,1,0>'
Error C2059 syntax error : 'template'
Error C2039 'X' : is not a member of 'Eigen::Transform<float,3,1,0>'
我从未见过像X.template 这样的代码,所以我不知道如何纠正这个编译错误。有任何想法吗?
【问题讨论】:
-
您使用的是什么版本的 Eigen?我抓住了最新的副本,但找不到该代码...库中的代码是您编译的然后引用 Eigen 的吗? ..
X.template linear()应该类似于X.template linear<Lower>()或只是X.linear().. -
@txtechhelp 我没有编译Eigen,它是一个使用Eigen的库jacoposerafin.com/nicp
-
X.template和x.template不是有效的 C++;你打算这些表达是什么意思? -
这实际上是有效的 C++。这是一个
template消歧器,从this question 开始。诚然不是一个广泛使用的功能,可能是 VS2013 编译器的问题。 -
它看起来像一个模板函数,可能在 Windows 中引用,而不是其他平台(或类似的东西);因为模板推导(因此错误)仅在引用该函数时才会发生。并且根据
Eigen::Transformdocs,该函数不是模板函数,因此不需要template消歧器(因此会出现错误)。由于它在第 3 方库而不是 Eigen 中,您是否尝试过简单地删除template消歧器?