J'ai une classe qui a un tableau de const statique, il doit être initialisé en dehors de la classe:const statique C++ membre de classe initialisé donne une erreur de symbole en double lors de la liaison
class foo{
static const int array[3];
};
const int foo::array[3] = { 1, 2, 3 };
Mais je reçois un symbole en double foo :: array dans foo.o et main.o foo.o contient la classe foo, et main.o contient main() et utilise des instances de foo.
Comment puis-je partager ce tableau de const statique entre toutes les instances de foo? Je veux dire, c'est l'idée d'un membre statique.
Oui, c'est vrai. Merci! Je continue de faire ces erreurs stupides avec des fichiers d'en-tête et d'obtenir des erreurs de liens. – Petruza
J'avais une question à ce sujet - Pourquoi les gardes d'en-tête ne résolvent-ils pas le problème? - Merci, Sid. – Opt
Les protecteurs d'en-tête fonctionnent uniquement dans le cadre d'une unité de compilation, telle qu'un fichier .cpp. Si vous avez plusieurs fichiers .cpp dans votre projet, chacun d'entre eux est compilé en tant qu'unité séparée. Si elles incluent le même en-tête, il sera inclus pour chaque fichier .cpp, ainsi le symbole sera multiplié. – Sean