Question

J'obtiens l'erreur de compilation dans le code ci-dessous.

class A
{
public:
    A()
    {
    }
    ~A()
    {
    }
 void func()
 {
     cout <<"Ha ha ha \n";
 }

};

class C
{
public:
    C()
    {
    }
    ~C()
    {
    }
template<typename type> func()
{
    type t;
    t.func();
}
void callme()
{
    func<A>();
}
};
Était-ce utile?

La solution

VC6 ne prend pas en charge les modèles de fonction membres. Vous avez fait plusieurs solutions:

Déplacer func() de la définition de la classe

template<typename type> void func()
{
    type t;
    t.func();
}

ou rewrite callme()

void callme()
{
   A a;
   a.func();
}

ou utiliser le modèle de classe

class C
{
public:
   template<class T> struct func
   {
      void operator()()
      {
         T t;
         t.func();
      }
   };

   void callme()
   {
      func<A>()();
   }
};

Autres conseils

La définition de func<T>() ne précise pas son type de retour, ce qui est invalide en C ++.

Il devrait être:

template<typename type> void func()
{
    type t;
    t.func();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top