Search code examples
c++macostemplatesinheritancevirtual

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).


Solution

  • 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.