【发布时间】:2015-10-22 16:47:32
【问题描述】:
我正在尝试用我自己的函数替换 Eigen 中 3x1 向量之和的函数。例如,
Matrix<float, 3, 1> q, q2, q3;
q.setRandom();
q2.setRandom();
q3.setRandom();
q3 = q + q2;
我希望 q3 是我自己的函数计算出来的。
由于 Eigen 实际上是通过 operator= 而不是 operator+ 来计算总和,并且 operator+ 只返回一个 CwiseBinaryOp 对象,所以我需要重载 operator=。
现在我正在使用 EIGEN_MATRIX_PLUGIN marco 将我的代码添加到 Eigen 的 Matrix.h:
inline Matrix<float, 3, 1> &operator=(
const CwiseBinaryOp<internal::scalar_sum_op<float>, const Matrix<float, 3, 1>, const Matrix<float, 3, 1>>
&op) {
float *t = m_storage.data();
op.lhs(); //error here
return *this;
}
我自己的函数需要访问指向q、q2和q3的数据的指针。但是在尝试通过CwiseBinaryOp对象访问q和q2的数据时出现如下错误。
In file included from /home/tong/Program/Eigen/Eigen/src/Core/Matrix.h:340:0,
from /home/tong/Program/Eigen/Eigen/Core:294,
from /home/tong/Program/Eigen/Eigen/Dense:1,
from /home/tong/ClionProjects/EigenTest/main.cpp:7:
/home/tong/ClionProjects/EigenTest/MatrixAddon.h: In member function ‘Eigen::Matrix<float, 3, 1>& Eigen::Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::operator=(const Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<float>, const Eigen::Matrix<float, 3, 1>, const Eigen::Matrix<float, 3, 1> >&)’:
/home/tong/ClionProjects/EigenTest/MatrixAddon.h:12:7: error: invalid use of incomplete type ‘const class Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<float>, const Eigen::Matrix<float, 3, 1>, const Eigen::Matrix<float, 3, 1> >’
op.lhs();
^
In file included from /home/tong/Program/Eigen/Eigen/Core:252:0,
from /home/tong/Program/Eigen/Eigen/Dense:1,
from /home/tong/ClionProjects/EigenTest/main.cpp:7:
/home/tong/Program/Eigen/Eigen/src/Core/util/ForwardDeclarations.h:89:65: error: declaration of ‘const class Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<float>, const Eigen::Matrix<float, 3, 1>, const Eigen::Matrix<float, 3, 1> >’
template<typename BinaryOp, typename Lhs, typename Rhs> class CwiseBinaryOp;
我想知道为什么会出现这个错误以及如何摆脱它。
【问题讨论】:
-
好吧,我也尝试了 Džanan 在 VS 2015 中所说的,效果很好。我在使用 g++ 时遇到了错误,我不得不使用它。但是这个问题怎么可能和编译器有关系呢?
标签: c++ templates operator-overloading eigen