2017-05-26 4 views
0

Je développe un projet qui compile certaines bibliothèques avec c99 et une bibliothèque avec C++ 11 et utilise des nombres complexes complex.h dans la bibliothèque c99. Je sais que c'est peut-être une idée stupide, mais ce n'était pas le mien et je dois le faire fonctionner d'une manière ou d'une autre.Comment compiler des nombres complexes avec C++ 11

Le code ne compile pas avec gcc4.9 et -std = C++ 11 et je suis tout à fait clueless quoi faire. Comment puis-je compiler cet extrait?

#include <complex.h> 
#include <cstdio> 

int main(int argc, char * argv[]) { 
    double _Complex a = 3.0 + 0.0 * _Complex_I; 
    //printf("%lf\n", creal(a)); 
    return 0; 
} 

donne l'erreur

In file included from /usr/local/include/c++/7.1.0/complex.h:36:0, 
       from main.cpp:1: 
main.cpp: In function 'int main(int, char**)': 
main.cpp:5:33: error: unable to find numeric literal operator 'operator""iF' 
    double _Complex a = 3.0 + 0.0 _Complex_I; 
           ^
main.cpp:5:33: note: use -std=gnu++11 or -fext-numeric-literals to enable more built-in suffixes 
main.cpp:5:33: error: expression cannot be used as a function 
    double _Complex a = 3.0 + 0.0 _Complex_I; 
           ^
main.cpp:5:19: warning: unused variable 'a' [-Wunused-variable] 
    double _Complex a = 3.0 + 0.0 _Complex_I; 

avec

g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp && ./a.out 

-std = gnu ++ 11 œuvres, il semble, mais est-il un moyen de le faire fonctionner avec std = C++ 11?

+0

Ne devrait-il pas s'agir d'un double complexe a = 3.0 + 0.0 * _Complex_I; '? (Notez le '*') –

+0

à droite. Je l'ai corrigé – Philipp

Répondre

1

Comment compiler des nombres complexes C++ c avec 11

Vous n'avez pas. La norme C++ ne prend pas en charge l'en-tête de la bibliothèque C <complex.h>.

Soit:

  • Utilisez les extensions de langage de GCC.
  • Implémentez une fonction wrapper pour tout ce qui concerne les nombres complexes C qui fournit une interface qui n'utilise pas les nombres complexes C. Implémentez l'encapsuleur dans C et utilisez l'encapsuleur de C++.
  • N'utilisez pas de nombres complexes C en premier lieu - utilisez std::complex à la place.
+0

C'est vraiment triste. Will -std = gnu ++ 11 compiler sur Windows par hasard? Merci pour les options! – Philipp

+0

@Philipp Vous pouvez essayer le minimaliste GNU pour Windows. – user2079303

+0

Merci, mingw semble soutenir -std = gnu ++ 11 – Philipp