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でコンパイルします。
このエラーの原因は何ですか?
myClass
はクラステンプレートであるため、テンプレートパラメータを指定する必要があります。
_template<typename T>
myClass<T>::myClass(void) : std::stack<T>() {
// ^^^
}
_
ところで:: std::stack<T>()
は冗長なようです。