Eigen 与在另一个(模板)类中使用“auto”的运算符之间的冲突

Conflict between Eigen and operator that uses ‘auto’ in another (template) class

提问人:user2129053 提问时间:8/8/2023 最后编辑:prapinuser2129053 更新时间:8/8/2023 访问量:54

问:

我有一个名为“Variable.h”的模板类,它是所有程序变量的基础。 添加 Eigen 处理矩阵计算后,每次编译程序时,都会出现一系列错误,看起来像是算子重载、自动算子和 Eigen 之间的冲突。 我只在 Linux 中得到错误,在 Windows 中它可以正常编译(我刚刚开始使用 Linux)。 我正在使用 C++17 和 g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 版本

以下是错误和它指责为错误的一行

Variable.h: In instantiation of ‘auto operator<=(T, U) [with T = Eigen::internal::unpacket_traits<__vector(2) double>::<unnamed enum>; U = int]’:
Variable.h:290:80:   required from ‘auto operator>=(T, U) [with T = int; U = Eigen::internal::unpacket_traits<__vector(2) double>::<unnamed enum>]’
Eigen/src/Core/Matrix.h:30:115:   required from ‘struct Eigen::internal::traits<Eigen::Matrix<double, 3, 3> >’
Eigen/src/Core/PlainObjectBase.h:98:7:   required from ‘class Eigen::PlainObjectBase<Eigen::Matrix<double, 3, 3> >’
Eigen/src/Core/Matrix.h:178:7:   required from ‘class Eigen::Matrix<double, 3, 3>’
SoilOrganicMatter.h:499:19:   required from here
Variable.h:291:80: error: use of ‘auto operator>=(T, U) [with T = int; U = Eigen::internal::unpacket_traits<__vector(2) double>::<unnamed enum>]’ before deduction of ‘auto’
  291 |  T, typename U> auto operator <= (T lhs, U rhs) { return rhs >= lhs; };
      |                  

Variable.h,第 290 行和第 291 行

template <typename T, typename U> auto operator >= (T lhs, U rhs) { return rhs <= lhs; };
template <typename T, typename U> auto operator <= (T lhs, U rhs) { return rhs >= lhs; };

SoilOrganicMatter.h 第 499 行

Eigen::Matrix3d carbonPart;

如果我注释重载运算符,我会摆脱错误,这似乎没问题,但我没有编写这个类,所以我不知道它通过程序产生的所有影响。

有人可以帮我找出问题所在,或者找到任何线索吗?

C++ 模板 C++17 运算符重载 特征

评论

7赞 Davis Herring 8/8/2023
你试图定义每一个,并用另一个来定义......?<=>=
3赞 user17732522 8/8/2023
"我没有写这个类“:找到写它的人,问他们到底打算做什么,因为这些重载似乎根本没有任何意义。

答: 暂无答案