web-dev-qa-db-ja.com

テンプレートと派生クラスの定義:エラー: 'myClass'はクラス、名前空間、または列挙ではありません

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でコンパイルします。

このエラーの原因は何ですか?

18
vmonteco

myClassはクラステンプレートであるため、テンプレートパラメータを指定する必要があります。

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

[〜#〜]ライブ[〜#〜]


ところで:: std::stack<T>()は冗長なようです。

28
songyuanyao