C++ erreur: déclaration d'un Membre non trouvé
Je suis une c++ débutant. Aujourd'hui, j'ai un problème:
dans le fichier d'en-tête, je définir une classe:
template<class T> class Ptr_to_const {
private:
Array_Data<T>* ap;
unsigned sub;
public:
...
Ptr_to_const<T> & operator=(const Ptr_to_const<T> & p);
};
et dans le fichier source, je programme:
template<class T> Ptr_to_const<T>& Ptr_to_const<T>::operator=(
const Ptr_to_const<T> & p) {
...
return *this;
}
lors de la compilation, le compilateur disons toujours: "déclaration d'un Membre ne trouve pas'.
pourquoi?
- Je utiliser eclipse CDT+Cygwin GCC
merci beaucoup!
Autant que je sache, vous ne devez pas mettre en œuvre un modèle de classe dans un fichier source. Définir la définition de la fonction dans l'en-tête.
OriginalL'auteur wenfeng | 2012-01-13
Vous devez vous connecter pour publier un commentaire.
Modèle de classes doivent être déclarées et définies dans l'en-tête, ou un autre fichier qui est inclus par les utilisateurs. Ils ne peuvent pas être déclarées dans un en-tête et défini dans un fichier source, comme d'habitude.
Le raisonnement est que le modèle doit être remplacé par un véritable type et de la source qui les a générés et compilé lorsqu'il est utilisé, et le compilateur ne peut certainement pas précompiler des modèles pour chaque type de possibles qui peuvent venir le long, de sorte que les utilisateurs doivent être en mesure de le gérer (et donc besoin d'avoir accès au code).
Cela ne causer quelques problèmes lors du passage d'objets, si plusieurs bibliothèques sont les mêmes modèles, car ils peuvent être compilés sur les différentes versions de l'en-tête (voir Une Définition de la Règle).
OriginalL'auteur ssube
"Déclaration d'un membre ne se trouve pas" est une erreur produite par l'Éclipse outil d'analyse statique (codan) plutôt que de compilateur. Si vous obtenez cette erreur, mais la compilation réussit c'est un faux positif. Les anciennes versions de cet outil sont connus pour donner quelques faux positifs, voir par exemple ce rapport de bug. Je recommande donc la mise à jour d'Eclipse CDT de la version la plus récente. Si cela ne vous aide pas, soumettre un rapport de bogue pour Eclipse CDT.
Toutefois, si vous obtenez des erreurs de compilateur trop (elles sont indiquées par C/C++ Problème dans le Type de la colonne dans la vue) alors vous avez probablement oublié d'inclure le fichier d'en-tête.
OriginalL'auteur vitaut
Vous devriez inclure dans votre fichier source à la fin du fichier d'en-tête
ou vous pouvez définir une fonction membre dans le fichier d'en-tête lorsque vous définissez une classe de modèle
OriginalL'auteur benlong