gpt4 book ai didi

C++ 在同一个文件中

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:27 31 4
gpt4 key购买 nike

我有一个使用 c++ <complex> 的大型代码库标题和许多std::complex<double>对象。但现在我还想使用其他几个使用 fftw 的库( spinsfast <complex.h> ) .不幸的是,混合这两种类型的复合体似乎与 gcc 4.6.1 不兼容(大概在其他情况下)。

这是一个显示错误的最小工作示例:

// This is what I do for my various complex objects
#include <complex>

// This is one of many things FFTW/spinsfast essentially do
extern "C" {
#include <complex.h>
}

int main() {
std::complex<double>(1.0,2.0);
return 0;
}

当我编译时:

> g++ test.cpp -o test
test.cpp: In function ‘int main()’:
test.cpp:7:8: error: expected unqualified-id before ‘_Complex’
test.cpp:7:8: error: expected ‘;’ before ‘_Complex’

显然,gcc 正在翻译 std::complex<double>进入_Complex ,这在某种程度上也是未定义的。 [这在我的 macbook 上运行良好,它使用 Apple LLVM 5.1 版;此编译器错误发生在我需要支持的集群上。]

我什至不知道这是从哪里来的;我的 gcc 安装中的所有包含文件都没有“_Complex”——尽管它们确实有“_ComplexT”。我该如何调试这种东西?

或者更有帮助的是,我如何解决这个编译器错误,而不仅仅是一小部分 gcc是吗?

最佳答案

在 C 中,_Complex是用于声明复数的关键字:float _Complex .然而,他们#define complex _Complex所以你可以写float complex哪个看起来更好。

当然,使用名称 complex 时您会遇到麻烦在您想要的以外的环境中_Complex ,例如 std::complex ,然后扩展为 std::_Complex .

所以如果你使用 <complex>在 C++ 中,你应该去掉这个宏:

#include <complex.h>
#undef complex

这实际上是 g++ 自 4.8 以来支持 <complex> 的做法。和 <complex.h>在同一个翻译单元中。

请注意,启用 C++11 时,您也不会收到错误。

关于C++ <complex> 和 <complex.h> 在同一个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23414270/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com