c ++ und <complex.h> mit <complex> in separaten Dateien

Anmerkungen

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.

Installieren

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 {

...
Problem

clang 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage