"+=" 操作在类型之间不起作用 std::复杂<double>和__complex__双精度



我正在使用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 添加了新的文字语法,使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;

相关内容

  • 没有找到相关文章

最新更新