2016-12-19 5 views
1

私のコンストラクタのいくつかに問題があります。私はそれを通じ使用しようとしましたメンバの初期化 'SuperClass'は非静的なデータメンバまたはベースクラスの名前ではありません

template<typename T, typename S> 
class SuperClass { 
protected: 
    OtherClass <T> const& _class1; 
    OtherOtherClass <T> const& _class2; 

    SuperClass() { 

    } 

    SuperClass(OtherClass<T> const& class1, OtherOtherClass<T> const& class2) 
     : _class1(class1), _class2(class2) 
    { 
      // Alternative I tried: 
      // this->_class1 = class1; 
      // this->_class2 = class2; 
    } 

:その後

template<typename T, typename S> 
    class SubClass1 : public SuperClass<T, S> { 
    private: 
     someFunc() { 
      return this->_class1.getSomething(); // as an example 
     } 

    public: 
     SubClass1(OtherClass<T> const& class1, 
       OtherOtherClass<T> const& class2) 
       : SuperClass(class1, class2) 
      { 
       // some definitions 
      } 

    } 

どちらのサブクラスは、これらのクラスは、スーパークラスで初期化されなければならない理由がある、同じクラス(なしのスーパークラス)を取得する必要がありますこのエラーが現れます:

メンバー初期化子 「スーパークラス」は

非静的データメンバや基本 クラスを指定しません

同様の問題を抱えている人がいましたが、私を解決に導いてくれませんでした。例:member initializer does not name a non-static data member or base class 私はそこに多くの違いは見当たりませんでしたし、彼のように空のコンストラクタを追加しようとしました。

+2

[mcve] – Barry

+0

を提供してください。クラス 'SubClass1'の定義を表示できますか? –

+0

SuperClass (...)を読みますか? –

答えて

4

エラーがそれをすべて言う:

メンバー初期化子「SuperClass

非静的データメンバまたは基本クラスを指定しない

SuperClassはクラスではありません。クラステンプレートです。したがって、あなたのタイプの基本クラスではありません。基本クラスは、クラステンプレートの具体的なインスタンス化です:SuperClass<T,S>。それはあなたが必要とするものです:

SubClass1(OtherClass<T> const& class1, 
      OtherOtherClass<T> const& class2) 
    : SuperClass<T,S>(class1, class2) 
    //   ^^^^^ 
関連する問題