我正在尝试用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>(){
}
但是当我尝试编译时,我无法弄清楚为什么会得到以下内容:
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.
看起来函数的定义会导致错误,但我不知道为什么会出现这个错误,它看起来对我好(即使我猜它不是真的好),也许只是一个语法错误?
我使用 clang ++ -Wall -Werror -Wextra -c 编译。
什么可能导致此错误?
答案 0 :(得分:20)
您需要为其指定模板参数,因为myClass
是模板类。
template<typename T>
myClass<T>::myClass(void) : std::stack<T>() {
// ~~~
}
BTW:: std::stack<T>()
似乎是多余的。