“+=”操作在类型 std::complex<double> 和 __complex__ 之间不起作用
"+=" operation not working between types std::complex<double> and __complex__ double
我正在使用 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
的类型不知何故不同,计算机无法解析差异。有人可以向我解释这些差异是什么,以及如何消除差异?我可以尝试找出两台计算机的不同配置方式,但这似乎是一个更难获得在线帮助的问题。
C++ 14 添加了 new literal syntax 以使 a+bi
计算为 std::complex<double>
.
添加
应该就够了
set(CMAKE_CXX_STANDARD 14) # or 17
到您的 CMakeLists.txt 文件以使两个编译器再次一致。
确保添加行
using namespace std::complex_literals;
在 main() 函数的开头。
同时检查你可能想做 A(0,0) += 2.0 + 1i;
而不是 A(0,0) += 2.0*1i;
我正在使用 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
的类型不知何故不同,计算机无法解析差异。有人可以向我解释这些差异是什么,以及如何消除差异?我可以尝试找出两台计算机的不同配置方式,但这似乎是一个更难获得在线帮助的问题。
C++ 14 添加了 new literal syntax 以使 a+bi
计算为 std::complex<double>
.
添加
应该就够了set(CMAKE_CXX_STANDARD 14) # or 17
到您的 CMakeLists.txt 文件以使两个编译器再次一致。
确保添加行
using namespace std::complex_literals;
在 main() 函数的开头。
同时检查你可能想做 A(0,0) += 2.0 + 1i;
而不是 A(0,0) += 2.0*1i;