Ich habe eine große Codebasis, die die C++ <complex>
Header und viele std::complex<double>
Objekte verwendet. Aber jetzt möchte ich auch ein paar andere Bibliotheken verwenden (fftw
und spinsfast
), die <complex.h>
verwenden. Leider scheint das Mischen dieser zwei Arten von Komplexen mit gcc 4.6.1 (vermutlich unter anderen) inkompatibel zu sein.C++ <complex> und <complex.h> in der gleichen Datei
Hier ist ein minimales Arbeitsbeispiel zeigt den Fehler:
// 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;
}
Und wenn ich kompiliere:
> 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’
Offensichtlich gcc std::complex<double>
in _Complex
ist die Übersetzung, die irgendwie auch nicht definiert ist. [Das funktioniert gut auf meinem MacBook, das Apple LLVM Version 5.1 verwendet; Dieser Compilerfehler tritt bei einem Cluster auf, den ich unterstützen muss.]
Ich kann nicht einmal herausfinden, woher das kommt; Keine der Include-Dateien in meiner GCC-Installation haben "_Complex" - obwohl sie "_ComplexT" haben. Wie debugge ich so etwas?
Oder hilfreicher, wie löse ich diesen Compiler Fehler in einer Weise, die für mehr als nur ein kleines Stück von gcc
s funktioniert?
Haben Sie versucht, sowohl '' als auch '' anstelle von '' einzuschließen? –
Manu343726
Es scheint, als ob 'complex.h'' complex' definiert als '_Complex' nach http://pubs.opengroup.org/onlinepubs/009695399/basedefs/complex.h.html – leemes
Kein Problem hier mit gcc 4.8.2. Außerdem benötigen Sie normalerweise nicht den 'externen' C '{} '- Wrapper um Standard-Bibliotheksheader, da die Header normalerweise so geschrieben sind, dass sie entweder unter C oder C++ funktionieren, aber überprüfen Sie Ihre speziellen Header. – Edward