模板和派生类定义:错误:'myClass'不是类,命名空间或枚举

vmo*_*eco 15 c++ templates derived-class

我正在尝试用C++学习模板,我有以下代码:

#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>(){
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译时,我无法弄清楚为什么会得到以下内容:

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.
Run Code Online (Sandbox Code Playgroud)

它看起来像函数的定义导致错误,但我不知道为什么我得到这个错误,它看起来对我好(即使我猜它不是真的好),只是一个语法错误?

我用clang ++ -Wall -Werror -Wextra -c编译.

什么可能导致此错误?

son*_*yao 22

您需要为其指定模板参数,因为它myClass是模板类.

template<typename T>
myClass<T>::myClass(void) : std::stack<T>() {
//     ~~~
}
Run Code Online (Sandbox Code Playgroud)

BTW:: std::stack<T>()似乎是多余的.

生活