web-dev-qa-db-fra.com

erreur: la définition hors ligne de «test» ne correspond à aucune déclaration dans «B <dim>»

J'ai un petit problème qui me tue !! Je ne sais pas ce qui semble mal avec le code ci-dessous. Je devrais être capable d'implémenter la fonction héritée de la super classe, n'est-ce pas? mais je reçois 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;
}

Je suis sur un Mac utilisant clang (Apple LLVM version 5.1).

11
Fahad Alrashed

Essayer

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

Vous devez encore définir la fonction a déclaré la déclaration de classe.

11

Le problème est que vous essayez de définir le test de fonction en dehors de la définition de classe de la classe B. Vous devez le déclarer d'abord dans la classe

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