Question sur l'initialisation des variables "static"
Bonjour
J'ai une question concernant la déclaration de variables statiques:
Si je prends cette classe:
Code:
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:
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