Bonjour

J'ai une question concernant la déclaration de variables statiques:
Si je prends cette classe:

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;
}
La compilation me renvoit un message d'erreur:
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:


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;
}
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.

En fait, pourquoi on peut déclarer une variable statique comme "a"?

Merci