7
votes

C ++ Propriété statique

J'ai des problèmes d'accès à une propriété statique dans une classe. Je reçois l'erreur suivante:

Shape.Obj: Erreur LNK2001: Symbole externe non résolu "Public: Static Class TCollection Forme :: Formes"

La définition de la classe est la suivante: xxx

et la mise en oeuvre de la méthode statique: xxx

Il semble que le formes la propriété n'est pas initialisé.


6 commentaires

Wow merci pour les commentaires rapides. A pris des heures à la recherche et environ 1 minute sur Stackoverflow.


Je pense que vous regretterez très beaucoup d'avoir une variable statique ainsi que d'avoir une variable publique. As-tu réellement besoin de cela? Pourquoi ne laissez-vous pas simplement passer une collection Const & Object où que vous ayez besoin d'une liste de toutes formes? Cela encouragera d'autres développeurs à apporter une forme :: get_all_instances () chaque fois qu'ils ont besoin de la liste, au lieu de la transmettre explicitement. Cela conduira à toutes sortes de problèmes, lorsque vous souhaitez tester ou que vous souhaitez utiliser des sublistes de formes.


Oui, il est public pour le moment à cause du débogage furieux.


Ce gars de débogage furieux est rarement un bon conseiller design. :)


Bonne chose que c'est pour une mission :)


J'espère que vous voulez dire une classe "collection" personnalisée et non le système.collections.ObjectModel :: Collection . Eh bien, probablement oui, cela ne compilerait pas autrement ...


5 Réponses :


9
votes

oui. Vous devez ajouter

Collection<Shape*> Shape::shapes;


0 commentaires

4
votes

La déclaration est dans la classe.

La définition doit être placée dans exactement un fichier CPP: xxx


0 commentaires

6
votes

Vous avez déclaré formes mais je ne l'ai pas défini.

ajoutez la définition au fichier de mise en œuvre xxx


0 commentaires

14
votes

Vous avez raison depuis que la variable statique n'est déclarée que dans la classe et non définie.

vous doit les définir aussi, ajoutez simplement une ligne suivante dans le fichier où est votre implémentation. xxx

et il devrait faire le tour.


0 commentaires

4
votes

Pour le code, vous devez fournir une définition de formes , comme (dans un fichier de mise en œuvre) xxx

mais vous voudrez peut-être envisager Une fonction de membre qui renvoie une référence à une collection Static locale .

acclamations et hth.


0 commentaires