2010-08-13 5 views
1

J'ai cet exemple code: #includene peuvent pas obtenir par exemple compilé avec typedef dans la classe de modèle

template<class T> 
class Class 
{ 
public: 
    typedef boost::shared_ptr<Class<T> > Ref; 
}; 

template<class T> 
class Class2 
{ 
public: 
    Class<T>::Ref getAReference() {return Class<T>::Ref(new Class<T>);}; 
}; 
int main(){} 

Lorsque je tente de le compiler, je reçois:

test.cpp:14: error: type ‘Class<T>’ is not derived from type ‘Class2<T>’ 
test.cpp:14: error: expected ‘;’ before ‘getAReference’ 

Je ne comprends pas ça, pourquoi ça ne marche pas? Comment puis-je le faire fonctionner?

+0

Vous montrez l'intégralité du code? Il vous manque clairement un 'typename', mais si c'est le message d'erreur que vous obtenez d'un' typename' manquant avec exactement le code que vous avez posté les diagnostics du compilateur sont étranges pour dire le moins. La première ligne d'erreur semble pointer vers une relation d'héritage qui n'est pas présente dans le code. –

+0

Je suis d'accord que c'est étrange, mais je montre le code entier et un nom de type a fait disparaître le message. – Nathan

Répondre

4

Vous devez dire au compilateur que Ref est un type en utilisant typename à savoir

typename Class<T>::Ref getAReference() {return Class<T>::Ref(new Class<T>);}; 

Cette question traite davantage.

+0

+1 - http://codepad.org/1BXCAoeW –

Questions connexes