web-dev-qa-db-ja.com

エラー:「test」の行外定義が「B <dim>」のどの宣言とも一致しません

私を殺している小さな問題があります!!以下のコードで何が問題になっているのかわかりません。スーパークラスから継承した関数を実装できるはずですよね?でもerror: out-of-line definition of 'test' does not match any declaration in 'B<dim>'

template <int dim>
class A 
{
public:
  virtual double test() const ;
};

template <int dim>
class B : public A <dim>
{
};

template <int dim>
double B<dim>::test () const
{
  return 0;
}

Macでclang(Apple LLVMバージョン5.1)を使用しています。

11
Fahad Alrashed

試す

template <int dim>
class B : public A <dim>
{
public:
     virtual double test () const;
};

// Function definition
template <int dim>
double B<dim>::test () const
{
  return 0;
}

あなたはまだdefine関数がクラス宣言を宣言する必要があります。

11

問題は、クラスBのクラス定義の外部で関数テストを定義しようとしていることです。最初にクラスで宣言する必要があります

template <int dim>
class B : public A <dim>
{
   double test() const;
};
3