C ++ <complex> и <complex.h> в одном файле
У меня есть большая база кода, которая использует 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
s?