2011-03-03 2 views
0

J'ai supprimé tous les segments indésirables. J'essaie de passer des pointeurs vers un opérateur surchargé et j'utilise aussi des templates. Mais cela ne fonctionne toujours pas.Impossible de passer un pointeur sur une fonction

#include<iostream.h> 
#include<conio.h> 

class Test{ 
     private: 
      int a; 
     public: 
      Test(){} 
      Test(int k){ 
       a=k; 
      } 
      Test* operator +(Test *p){ 
        Test *temp=new Test(this->a+p->geta()); 
        return temp; 
      } 
      int geta(){ 
        return a; 
      } 
}; 

template<class T> 
    T* sum(T* a,T* b){ 
    return a+b; 
} 

int main(){ 
    Test *t1,*t2; 
    t1=new Test(5); 
    t2=new Test(7); 
    Test *z=sum(t1,t2); 
    cout<<z->geta(); 
    getch(); 
} 

Répondre

3

Tout d'abord, t1 est un pointeur, dont vous appelez la méthode add mal - devrait être t1->add(t2). En second lieu, les sum() méthodes prend des arguments qui ne sont pas des pointeurs, à savoir le paramètre de modèle est déduit que Test plutôt que Test*, il faut donc changer la signature à quelque chose comme:

template <typename T> 
T* sum(T* a, T* b) 
{ 
    return a->add(b); // or some variant... 
} 
+0

Faut-il vraiment en faire un modèle? Comme il est en train de passer deux ints à un très bon modèle et juste en les ajoutant – CashCow

+0

@CashCow, dans ce cas, vraiment pas besoin - je corrigeais simplement son utilisation ... – Nim

+0

merci ... que t1.add était juste une erreur idiote ... mais je me suis dit que le modèle ... J'ai été sous l'impression qu'il inclurait des références de pointeurs aussi ... et im juste duper avec des modèles ... je n'ai pas l'intention d'utiliser ce code segment newhr .... je suis un débutant vous voyez .... merci agian .... – JunkMechanic

1

qui apprend à programmer en C++ cette façon ? iostream.h ??? Et une surcharge de l'opérateur + qui prend et retourne un pointeur? La somme échouera donc si vous essayez de l'utiliser pour les objets Test.

Comme il est, il est en train d'ajouter des ints, pas des tests.

Vous avez un pointeur de sorte que lorsque vous appelez ajouter, vous devez utiliser -> pour appeler la fonction, mais c'est vraiment un gros bazar.

+0

wats mauvais wid iostream.h .... et j'étais jus de playin arnd wid templates .... mon premier programme avec des modèles ... et personne ne m'enseigne ... – JunkMechanic

+0

@ankur: La façon habituelle d'utiliser 'cout' est de' #include '...' std :: cout << "etc."; ' – Bill

0

Comme Nim a déjà répondu correctement. Je vais simplement donner quelques suggestions.

Pas besoin de ceci-> a. Seul un testament suffira.

int d=a+p->geta(); 
int k=sum(2,4); is again wrong as this is going to return class and not int. 

De plus, l'opérateur + n'est pas correct. S'il vous plaît en apprendre davantage sur la référence et essayer d'apprendre à partir d'un bon livre. C'est un bon essai en tant que premier programme.

Questions connexes