web-dev-qa-db-ja.com

「Xはテンプレートではありません」エラー

テンプレートクラスの宣言に問題があります。私は、多くの読みにくく、無意味な組み合わせを試しました。

template <class C, class M >
class BlockCipherGenerator : public KeyGenerator
{
  ...
  private:
      M < C > m_cipher;
};

そして

template <class C, class M >
class BlockCipherGenerator : public KeyGenerator
{
  typedef typename C::value_type CIPHER;
  typedef typename M::value_type MODE;
  private:
      MODE < CIPHER > m_cipher;
};
28
jww

それはそれが言うことです。

あなたのテンプレートパラメータリストは Mclassであり、template ではないことを示しています。

それがクラスtemplateであると言う場合、 それですべてうまくいく

template <class C, template <class C> class M>
class BlockCipherGenerator : public KeyGenerator
{
      M<C> m_cipher;
};

std::vectorはクラスではなくですが、クラステンプレートです。何かのようなもの std::vector<int>はクラス(タイプ)です。