Je viens de découvrir que ce qui suit n'est pas valide.
//Header File
class test
{
const static char array[] = { '1', '2', '3' };
};
Quel est le meilleur endroit pour initialiser cela?
Le meilleur endroit serait dans un fichier source
// Header file
class test
{
const static char array[];
};
// Source file
const char test::array[] = {'1','2','3'};
Vous pouvez initialiser des types entiers dans la déclaration de classe comme vous avez essayé de le faire; tous les autres types doivent être initialisés en dehors de la déclaration de classe, et une seule fois.
Vous pouvez toujours effectuer les opérations suivantes:
class test {
static const char array(int index) {
static const char a[] = {'1','2','3'};
return a[index];
}
};
Quelques belles choses sur ce paradigme:
//Header File
class test
{
const static char array[];
};
// .cpp
const char test::array[] = { '1', '2', '3' };
Maintenant, en C++ 17, vous pouvez utiliser la variable inline
Comment fonctionnent les variables en ligne?
Un simple membre de données statiques ( N4424 ):
struct WithStaticDataMember { // This is a definition, no outofline definition is required. static inline constexpr const char *kFoo = "foo bar"; };
Dans votre exemple:
//Header File
class test
{
inline constexpr static char array[] = { '1', '2', '3' };
};
devrait juste fonctionner