web-dev-qa-db-fra.com

Initialisation d'un tableau de const const de chaînes const en C ++

J'ai du mal à initialiser un tableau constant de chaînes constantes.

À partir de week.h (affichant uniquement les pièces pertinentes):

class Week {
  private:
    static const char *const *days = { "mon", "tue", "wed", "thur",
                                       "fri", "sat", "Sun" };
};

Lorsque je compile, j'obtiens l'erreur "éléments en excès dans l'initialiseur scalaire". J'ai essayé de le faire taper const char **, pensant avoir gâché le 2e placement de const, mais j'ai eu la même erreur. Qu'est-ce que je fais mal?

29
Nick

Tout d'abord, vous avez besoin d'un tableau, pas d'un pointeur.

static const char * const days[] = {"mon", "tue", "wed", "thur",
                                       "fri", "sat", "Sun"};

Deuxièmement, vous ne pouvez pas initialiser cela directement dans la définition de classe. Dans la définition de classe, ne laissez que ceci:

static const char * const days[]; //declaration

Ensuite, dans le fichier .cpp, écrivez la définition

const char * const Week::days[] = {"mon", "tue", "wed", "thur",
                                       "fri", "sat", "Sun"};

Mise à jour pour C++ 11 Vous pouvez maintenant initialiser les membres directement dans la définition de classe:

const char * const days[] = {"mon", "tue", "wed", "thur",
                                       "fri", "sat", "Sun"};
51
Armen Tsirunyan

Pour C++ 11, vous pouvez faire l'initialisation dans votre déclaration de classe, dans votre . H fichier. Cependant, vous devrez également inclure constexpr dans votre fichier . Cpp . Exemple pour le cas ci-dessus:

Dans votre fichier week.h, écrivez:

class Week {
    public:        
       static const constexpr char* const days[] = 
           { "mon", "tue", "wed", "thur","fri", "sat", "Sun" };
};

Dans votre fichier week.cpp, écrivez quelque part:

constexpr const char* const Week::days[];

Assurez-vous d'activer C++ 11, par exemple compiler avec

g ++ -std = c ++ 11 semaine.cpp

16
marni