Pour autant que je sache, en C++ on peut déclarer plusieurs fois le même nom, dans la mesure où il a le même type dans toutes ces déclarations. Pour déclarer un objet de type int
, mais PAS le définir, le mot-clé extern
est utilisé. Donc, ce qui suit devrait être correct et compiler sans erreurs:Déclarations multiples C++ dans une portée locale
extern int x;
extern int x; // OK, still declares the same object with the same type.
int x = 5; // Definition (with initialization) and declaration in the same
// time, because every definition is also a declaration.
Mais une fois que je me suis déplacé ce à l'intérieur d'une fonction, le compilateur (GCC 4.3.4) se plaint que je suis redéclarant x
et qu'il est illégal. Le message d'erreur est le suivant:
test.cc:9: error: declaration of 'int x'
test.cc:8: error: conflicts with previous declaration 'int x'
où int x = 5;
est dans la ligne 9 et extern int x
est en ligne 8.
Ma question est:
Si plusieurs déclarations ne sont pas censés être des erreurs, puis POURQUOI est-ce une erreur dans ce cas particulier?
Que vous, maintenant je comprends. Il n'y a donc aucun moyen de simplement déclarer un objet dans la fonction sans le définir en même temps? – SasQ
@SasQ: Oui, je crois que c'est vrai. –