2010-12-09 4 views
2

Je reçois une erreur de compilation dans le code ci-dessous.Erreur avec le modèle de fonction membre

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>(); 
} 
}; 
+0

Quelle est l'erreur? – Naveen

+0

erreur C2275: 'A': utilisation illégale de ce type comme une expression – Satbir

+0

Comment appelez-vous 'callme()'? – Kleist

Répondre

3

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

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

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

ou récrire 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>()(); 
    } 
}; 
3

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(); 
} 
+0

Mais ce n'est pas le problème réel. – Satbir

+0

@sat, g ++ compile le code sans erreur si j'ajoute le type de retour. Est-ce que le compilateur Visual Studio donne toujours la même erreur? –

+0

Je travaille sur l'ancien compilateur VC6 ... cela signifie que VC6 est coupable .. Merci beaucoup pour votre réponse immédiate – Satbir

Questions connexes