0

次のコードがあります。

template <typename T>
class A {
    friend class B;
    struct model_struct {
       [...]
    }
}

template <typename T>
class B {
    func {
        typename vector<A<T>::model_struct > myVec;
    }
}

ベクトル宣言により、次のコンパイル エラーが発生します。

エラー: 'template class std::vector' のテンプレート パラメーター リストの引数 1 で型/値が一致しません</p>

エラー: 型が必要ですが、'ObjectExtraction::model_struct' を取得しました</p>

何か案は?

4

2 に答える 2

1

次の 3 つのものが欠けているようです。

  • クラス定義の末尾のセミコロン
  • フレンド宣言のテンプレート引数
  • 宣言のtypename指定子vector

後者は、エラーを引き起こした問題です。

func {...}の定義の が何をするのかよくわかりBません。削除することを検討してください。

最後に、テンプレートの前方宣言が必要にBなるため、実際に のフレンド宣言に使用できますA

コードを修正する試みは次のとおりです。

template <typename T>
class B; // Forward-declaration

template <typename T>
class A {
    friend class B<T>;  // template argument added
    struct model_struct {
       /*...*/
    };  // added semicolon
}; // semicolon added

template <typename T>
class B {
   /* Removed 'func'. */
   typename vector<typename A<T>::model_struct > myVec; // 'typename' added
};
于 2012-10-15T02:12:04.117 に答える
1

次のように変更する必要があります。

template <typename T>
class A {
    friend class B;
    struct model_struct {
       [...]
    }
}

template <typename T>
class B {
    func {
        vector<typename A<T>::model_struct > myVec;
    }
}
于 2012-10-15T02:12:19.870 に答える