Symbole externe non résolu sur la statique des membres de la classe
Très simplement:
J'ai une classe qui se compose essentiellement de la statique des membres du public, afin que je puisse le groupe de fonctions similaires ensemble, qui doivent encore être appelé à d'autres classes/fonctions.
De toute façon, j'ai défini deux static unsigned char variables dans ma classe étendue public, lorsque je tente de modifier ces valeurs dans la même classe, constructeur, j'obtiens un "symbole externe non résolu" erreur lors de la compilation.
class test
{
public:
static unsigned char X;
static unsigned char Y;
...
test();
};
test::test()
{
X = 1;
Y = 2;
}
Je suis novice en C++ alors allez facile sur moi. Pourquoi ne puis-je pas le faire?
Vous devez vous connecter pour publier un commentaire.
Vous avez oublié d'ajouter les définitions pour correspondre à vos déclarations de X et de Y
quelque part. Vous pouvez aussi initialiser un membre statique
et encore, vous n'avez que dans la définition (habituellement dans un fichier CXX) pas dans la déclaration (qui est souvent dans un .H fichier)
Données membres statiques déclarations dans la déclaration de classe ne sont pas définis.
Pour définir eux, vous devez le faire dans le
.CPP
fichier d'éviter la duplication des symboles.Les seules données que vous pouvez déclarer et définir font partie intégrante des constantes statiques.
(Les valeurs de
enums
peuvent être utilisés comme valeurs de constante ainsi)Vous pourriez vouloir réécrire votre code:
Si vous voulez avoir la possibilité de modifier vous de variables statiques (en d'autres termes, quand il est inapproprié de les déclarer comme const), vous pouvez séparer votre code entre
.H
et.CPP
de la manière suivante:.H :
.RPC :
Puisque c'est le premier fil qui semblait venir pour moi lors de la recherche pour "externes non résolus avec static const membres" en général, je vais laisser un autre indice pour résoudre un problème avec des externes non résolus ici:
Pour moi, la chose que j'ai oublié marque ma définition de la classe
__declspec(dllexport)
, et lorsqu'il est appelé à partir d'une autre classe (en dehors de cette classe dll limites), j'ai bien sûr eu la mon erreur externe non résolu.Toujours, facile de l'oublier, quand vous êtes à l'évolution interne d'une classe d'assistance pour un un accessible de partout, donc si vous travaillez dans un lié dynamiquement projet, vous pouvez ainsi vérifier que, trop.
dans mon cas, j'ai déclaré une variable statique dans .h de fichier, comme
et dans myClass.cpp j'ai essayé d'utiliser cette m_nMyVar. Il eu erreur de LIEN comme:
erreur LNK2001: symbole externe non résolu "public: static de la classe...
Le lien d'erreur liées fichier cpp ressemble:
J'ai donc ajouter le code ci-dessous sur le dessus de myClass.cpp
puis LNK2001 est allé.