J'ai un modèle de classe comme Sample.hpp avec alias de type X.Impossible d'accéder à l'alias de type de la définition du modèle de classe dans un fichier séparé sans avoir à taper la déclaration complète de type alias
#ifndef SAMPLE_HPP
#define SAMPLE_HPP
template<typename STA, typename STB>
class Sample
{
using X = Sample<STA,STB>;
public:
Sample();
inline X* GetNext() const;
private:
X* Next;
};
#include "Sample.cpp"
#endif // SAMPLE_HPP
et les définitions sont en Sample.cpp.
#include "Sample.hpp"
template<typename STA, typename STB>
Sample<STA,STB>::Sample() {
Next = nullptr;
}
template<typename STA, typename STB>
typename Sample<STA,STB>::X* Sample<STA,STB>::GetNext() const {
return this->Next;
}
Ma question est que, sont-il d'autres façons de définir GetNext fonction. Par exemple sans nom de type ou sans déclaration complète de Exemple de modèle de classe. Quand je change le code pour
template<typename STA, typename STB>
Sample<STA,STB>* Sample<STA,STB>::GetNext() const {
return this->Next;
}
Il fonctionne, mais je ne peux pas alias de type d'utilisation ici directement, par exemple:
template<typename STA, typename STB>
X* Sample<STA,STB>::GetNext() const {
return this->Next;
}
Merci beaucoup, pouvez-vous s'il vous plaît expliquer cela plus en détail? –
@CherkesgillerTural Sure chose. Donc, si vous mettez "X *" au début, le compilateur n'a aucun moyen de savoir que "X" est supposé l'être, donc vous obtenez une erreur. Mais si vous l'écrivez * après *, alors le compilateur peut chercher dans le champ 'Sample' pour 'X'. Si vous l'avez déjà mis, il n'a pas encore rencontré 'Sample ', donc il ne peut pas y trouver 'X'. Plus d'informations à ce sujet [ici] (http://en.cppreference.com/w/cpp/language/function). –
Rakete1111
Merci beaucoup, @ Rakete111. –