c ++ und <complex.h> mit <complex> in separaten Dateien
Ich kompiliere unter OSX mit Apple LLVM Version 6.0 (clang-600.0.56) (basierend auf LLVM 3.5svn)
nsbesondere versuche ich, eine monolithische Quelle aus LibIIR zu kompilieren, einer Filterbibliothek, die unterhalten wirHie von Laurence Withers.
Ich habe mir diese Antwort bereits angesehenHie über die Verwendung von beiden<complex>
und<complex.h>
in demsame file.
Ich habe eine Dateiiir.h
wie so:
#include <complex.h>
#ifdef __cplusplus
extern "C" {
#endif
...
Ich habe C ++ Quell- und Header-Dateienlibiir++.cpp
undiir++.h
wie so:
/*** libiir++.cpp ***/
// we need to include "iir.h" first, as it pulls in <complex.h>, which we need
// to take effect before "iir++.h" pulls in <complex>
#include "iir.h"
// now remove the preprocessor definition of complex to _Complex, which is fine
// for the C header but not good for the C++ header
#undef complex
#include "iir++.h"
namespace IIR {
...
-
/*** iir++.h ***/
#include <complex>
namespace IIR {
...
Problemclang gibt mir beim Kompilieren den folgenden Fehler:
./iir.h:570:15: error: expected ';' after top level declarator
double complex iir_response_c(const struct iir_coeff_t* coeff, double freq);
^
;
Evidently, das neue<complex>
Import findet nicht statt - oder#undef complex
passiert wieder - aber ich verstehe nicht wie. Irgendwelche Ratschläge, was möglicherweise schief geht oder was überprüft werden muss?