Je veux avoir une classe simple que je peux appeler pour obtenir un numéro unique pendant que le programme est en cours d'exécution - je peux faire ci-dessous avec une allocation dynamique, puis delete
sinon nécessaire, mais je voulais toujours obtenir une version static
aussi. Etrangement, le code ci-dessous (qui est apparemment simple) jette quelques étranges erreurs de comiple (ci-dessous).C++ statique int dans une classe - erreur de compilation
Des idées quoi de neuf? est-ce une utilisation incorrecte de statique?
class Id_gen {
private:
//adding static here stops the code from compiling:
static int curr_id;
public:
Id_gen() {curr_id = 1; cout<<"debug:constructed"; }
int get_id() {curr_id++; return curr_id; };
};
int main() {
Id_gen bGen;
cout << bGen.get_id() <<endl;
return 0;
}
en cours d'exécution g ++ (Linux 64):
c++2.cpp:(.text._ZN6Id_genC1Ev[Id_gen::Id_gen()]+0xe): undefined reference to `Id_gen::curr_id'
/tmp/cc766N6p.o: In function `Id_gen::get_id()':
c++2.cpp:(.text._ZN6Id_gen6get_idEv[Id_gen::get_id()]+0xa): undefined reference to `Id_gen::curr_id'
c++2.cpp:(.text._ZN6Id_gen6get_idEv[Id_gen::get_id()]+0x13): undefined reference to `Id_gen::curr_id'
c++2.cpp:(.text._ZN6Id_gen6get_idEv[Id_gen::get_id()]+0x19): undefined reference to `Id_gen::curr_id'
Ce sont des erreurs de liaison, pas des erreurs de compilation. – TheJuice
Ce sont des erreurs de liens, pas des erreurs de compilation. La distinction compte - en particulier lorsque vous commencez à travailler en équipe et que vous créez des bibliothèques pour vos collègues. –