我正在使用Eigen在C ++中执行一些矩阵操作。在其中,我有一条直线,形式为
MatrixXcd A = MatrixXcd::Zeros(10,10);
A(0,0) += 2.0*1i;
在我的本地计算机上编译此文件不会出现任何问题。但是,使用同一CMake文件在另一台计算机上编译它会出现以下错误:
error: no match for ‘operator+=’ (operand types are ‘Eigen::DenseCoeffsBase<Eigen::Matrix<std::complex<double>, -1, -1>, 1>::Scalar {aka std::complex<double>}’ and ‘__complex__ double’)
所以std::comple<double>
和__complex__ double
的类型有所不同,并且计算机无法解决该差异。有人可以向我解释这些差异是什么,以及如何消除差异吗?我可以尝试弄清楚两台计算机的配置不同,但这似乎很难获得在线帮助。
答案 0 :(得分:2)
C ++ 14添加了new literal syntax,使std::complex<double>
的评估结果为set(CMAKE_CXX_STANDARD 14) # or 17
。
添加就足够了
{{1}}
进入您的CMakeLists.txt文件,以使两个编译器再次达成共识。
答案 1 :(得分:1)
确保添加行
using namespace std::complex_literals;
main()函数的开头。
还要检查您可能想使用A(0,0) += 2.0 + 1i;
而不是A(0,0) += 2.0*1i;