Comme indiqué dans les commentaires, si vous utilisez un compilateur C au lieu d'un compilateur C++ pour compiler le code, vous obtiendrez inévitablement les erreurs indiquées. Le code est uniquement valable en C++, vous devez donc utiliser un compilateur C++ pour le compiler.
De plus, si vous utilisez un compilateur C, vous ne pourrez pas utiliser les noms qualifiés comme ' FG::black
ou BG::black
pour désambiguïser les noms ; C ne reconnaît pas le double-colonne comme un symbole valide.
D'après les commentaires ci-dessous :
En fait, le problème se trouve dans un autre fichier ; mon fichier C inclut le fichier d'en-tête, qui est l'en-tête contient un fichier de code C++, donc c'est la cause du problème. Donc mon fichier d'en-tête (foo.h) contient un code valide. Pourriez-vous suggérer une structure pour le fichier d'en-tête C ?
Si vous avez besoin de votre en-tête foo.h
pour être bilingue en C et C++, vous ferez probablement mieux avec une seule énumération, sans avoir besoin de l'option FG::black
y BG::black
de tous les qualificatifs :
#ifndef FOO_H_INCLUDED
#define FOO_H_INCLUDED
typedef enum Colour
{
black = 1,
red = 2,
green = 3
} Colour;
typedef struct FG
{
...
Colour shade;
...
} FG;
typedef struct BG
{
...
Colour shade;
...
} BG;
#endif // FOO_H_INCLUDED
Notez que les typedefs sont nécessaires pour permettre au code C de se référer à BG
, FG
y Colour
sans préfixe struct
ou enum
; le C++ pur n'aurait pas du tout besoin de ces typedefs. Cependant, vous écrivez du code bilingue et vous devez parfois écrire d'une manière qui semble légèrement guindée dans l'une ou l'autre langue.