错误:'test'的外线定义与'B <dim>'</dim>中的任何声明都不匹配

时间:2014-03-22 15:35:52

标签: c++ macos templates inheritance virtual

我有一个小问题就是杀了我!!我不知道下面的代码似乎有什么问题。我应该能够实现从超类继承的函数,不应该吗?但我得到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;
}

我在使用clang(Apple LLVM 5.1版)的Mac上。

2 个答案:

答案 0 :(得分:11)

尝试

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

您仍然需要定义声明类声明的函数。

答案 1 :(得分:3)

问题是你试图在类B的类定义之外定义函数测试。你必须首先在类中声明它

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