J'ai des problèmes d'accès à une propriété statique dans une classe. Je reçois l'erreur suivante:
La définition de la classe est la suivante: p> et la mise en oeuvre de la méthode statique: p> Il semble que le Shape.Obj: Erreur LNK2001: Symbole externe non résolu "Public: Static Class TCollection
formes code> la propriété n'est pas initialisé. p> p>
5 Réponses :
oui. Vous devez ajouter
Collection<Shape*> Shape::shapes;
La déclaration est dans la classe.
La définition doit être placée dans exactement un fichier CPP: p>
Vous avez déclaré ajoutez la définition au fichier de mise en œuvre p> formes code> mais je ne l'ai pas défini.
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. P > et il devrait faire le tour. p> p>
Pour le code, vous devez fournir une définition de mais vous voudrez peut-être envisager Une fonction de membre qui renvoie une référence à une collection Static acclamations et hth. p> p> formes code>, comme (dans un fichier de mise en œuvre)
locale
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.
:) code>
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 ...