web-dev-qa-db-fra.com

modèle et définition de classe dérivée: erreur: «maClasse» n'est pas une classe, un espace de noms ou une énumération

J'essaie d'apprendre des modèles en C++ et j'ai le code suivant:

#include <stack>

template<typename T>
class   myClass : public std::stack<T>{
public:
    myClass(void);
    myClass(myClass const & src);
    virtual ~myClass(void);
    myClass &   operator=(myClass const & rhs);
};

template<typename T>
myClass::myClass(void) : std::stack<T>(){
}

Mais je ne peux pas comprendre pourquoi j'obtiens ce qui suit lorsque j'essaie de compiler:

test.cpp:17:1: error: 'myClass' is not a class, namespace, or enumeration
myClass::myClass(void) : std::stack<T>(){
^
test.cpp:8:9: note: 'myClass' declared here
class   myClass : public std::stack<T>{
        ^
1 error generated.

Il semble que la définition de la fonction provoque l'erreur, mais je ne sais pas pourquoi j'obtiens cette erreur, elle me semble OK (même si je suppose que ce n'est pas vraiment OK), juste une erreur de syntaxe peut-être? ..

Je compile avec clang ++ -Wall -Werror -Wextra -c.

Qu'est-ce qui pourrait provoquer cette erreur?

18
vmonteco

Vous devez spécifier le paramètre de modèle pour cela, car myClass est un modèle de classe.

template<typename T>
myClass<T>::myClass(void) : std::stack<T>() {
//     ^^^
}

EN DIRECT


BTW: : std::stack<T>() semble être redondant.

28
songyuanyao