1. ホーム
  2. c++

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

2022-02-11 06:33:30

質問

私は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>() は冗長なようです。