Fahad Alrashed Fahad Alrashed - 1 month ago 13
C++ Question

error: out-of-line definition of 'test' does not match any declaration in 'B<dim>'

I have a small problem that is killing me!! I don't know what seems to be wrong with the below code. I should be able to implement the function that is inherited from the super class, shouldn't I? but I get

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;
}


I am on a Mac using clang (Apple LLVM version 5.1).

Answer

Try

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;
}

You still need to define the function declared the class declaration.