Bonjour
J'ai une question concernant la déclaration de variables statiques:
Si je prends cette classe:
La compilation me renvoit un message d'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class MyClass{ public: MyClass(){}; private: MyClass a; int b; }; int main(){ MyClass un_object; }
error C2460: 'MyClass::a' : uses 'MyClass', which is being defined
Et je comprends pourquoi ca compile pas, car au moment de la compilation, l'objet de type MyClass n'est pas totalement connu. De ce fait, on a un cercle vicieux.
En revanche, déclarer "a " comme pointeur sur MyClass fonctionne parfaitement.
Maintenant, si on déclare "a" comme variable static de type MyClass, ca fonctionne parfaitement:
Je ne comprends pas pourquoi, car même s'il s'agit d'une variable statique, (c'est a dire qu'on peut y accéder indépendamment d'une instance de la classe), elle n'en reste pas moins inconnue à la compilation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class MyClass{ public: MyClass(){}; private: static MyClass a; int b; }; int main(){ MyClass un_object; }
En fait, pourquoi on peut déclarer une variable statique comme "a"?
Merci
Partager