Probleme utilisation pointeur et reference

Probleme utilisation pointeur et reference - C++ - Programmation

Marsh Posté le 13-07-2007 à 16:49:59    

Salut,
 
J'ai un souci pour pouvoir utiliser un pointeur sur une classe(class packet_pv) avec l'operateur surcharge de cette classe.
Dans ma classe packet_pv l'operateur == est surcharge:
 

Code :
  1. bool packet_pv::operator == (const packet_pv& rhs) const{
  2.    unsigned int payload_size=get_payload_size();
  3.    bool equal=false;
  4.    if(payload.range(payload_size-1,0)==rhs.payload.range(payload_size-1,0))
  5.       equal = true;
  6.    return (equal && rhs.header == header && rhs.latency==latency && rhs.packet_id_comparator == packet_id_comparator);
  7. }


 
Dans mon code je recupere un pointeur sur un type packet_pv:

Code :
  1. //get a pointer to the Request
  2.   packet_pv *packet_ptr = req.getWriteDataSource();


 
ensuite je souhaite tester le packet_pv recu avec le contenu d'un tableau de packet_pv:

Code :
  1. //test packet_pv received
  2.   if(*packet_ptr== packet_array[playerID][packetID]){
  3.  
  4.    cout << "OK in transportRx2" << endl;
  5.   }else{
  6.    cout << "error in transportRx2" << endl;
  7.   }


 
Dans ce cas la comparaison renvoie false alors que les deux instances sont identiques.
Les variables rhs.header, rhs.payload, etc.., sont nulles alors que les variables header, payload, etc... sont OK
Vous avez des idees la dessus?
 
Merci
 
 

Reply

Marsh Posté le 13-07-2007 à 16:49:59   

Reply

Marsh Posté le 13-07-2007 à 16:54:28    

Salut,
 
packet_array ne renverrait pas tout bêtement un pointeur? Si non, comment est-il construit?

Reply

Marsh Posté le 13-07-2007 à 21:26:12    

IrmatDen a écrit :

Salut,
 
packet_array ne renverrait pas tout bêtement un pointeur? Si non, comment est-il construit?


 
Merci de ta reponse.
 
packet_array est declare comme suit:

Code :
  1. packet_pv packet_array[2][500];


 
ca devrait donc renvoyer un packet_pv et non un pointeur...
 
Je ne comprends pas pourquoi dans ma surcharge de l'operator == rhs.header, rhs.payload, ... sont nuls
 
 
 
 
 

Reply

Marsh Posté le 14-07-2007 à 00:41:19    

IrmatDen a écrit :

Si non, comment est-il construit?


;)

Reply

Marsh Posté le 14-07-2007 à 09:54:22    


 
Dans une autre fonction,
 
packet_array est construit comme ca:

Code :
  1. packet_array[i][j]=*packet_ptr;


 
packet_ptr est un pointeur sur packet_pv.
 
 

Reply

Marsh Posté le 14-07-2007 à 13:47:20    

Est-ce que tu as debuggé cette fontion précise? Je ne crois pas qu'il y ait d'erreur dans ce que tu montre, donc c'est probablement la construction du tableau qui ne passe pas pour une raison xyz...

Reply

Marsh Posté le 16-07-2007 à 09:58:19    

Si je compare directement quelques elements sans passer par l'operateur surcharge ==, les resultats sont corrects:
Ex:
 

Code :
  1. if( (packet_array[playerID][packetID].payload == (*packet_ptr).payload)
  2.     && (packet_array[playerID][packetID].get_header() == (*packet_ptr).get_header())){
  3.  
  4.    cout << "OK in transportRx1" << endl;
  5.   }else{
  6.    cout << "error in transportRx1" << endl;
  7.   }


 
J'obtiens Ok dans ce cas.
 
mais en passant par l'operateur == comme ceci:

Code :
  1. if(*packet_ptr == packet_array[playerID][packetID]){
  2.  
  3.    cout << "OK in transportRx1" << endl;
  4.   }else{
  5.    cout << "error in transportRx1" << endl;
  6.   }


 
a l'interieur de la fonction ==, rhs.payload, rhs.header sont nuls.
Peut etre est-ce un probleme avec cette fonction...
Si qqn a des idees ca m'aiderait bcp


Message édité par balabi le 16-07-2007 à 09:59:46
Reply

Marsh Posté le 16-07-2007 à 13:49:32    

Il faudrait que tu essaies de produire un exemple minimal, auquel cas, 2 possibilités:
> tu trouves l'erreur en réduisant
> tu nous permet d'avoir une base testable

 

Ce code marche bien chez moi:

Code :
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. class Packet_Pv
  7. {
  8. public:
  9.     int payload;
  10.     string header;
  11.  
  12.     bool operator==(const Packet_Pv &rhs) const
  13.     {
  14.         return payload == lhs.payload && header == lhs.header;
  15.     }
  16. };
  17.  
  18. int main()
  19. {
  20.     Packet_Pv p1;
  21.     p1.payload = 30;
  22.     p1.header = string("packet_pv header" );
  23.  
  24.     Packet_Pv p2;
  25.     p2.payload = 30;
  26.     p2.header = string("packet_pv header" );
  27.  
  28.     cout << "(p1 == p2)=" << (p1 == p2) << endl;
  29.  
  30.     Packet_Pv *p3 = new Packet_Pv;
  31.     *p3 = p1;
  32.     cout << "(p1 == p3)=" << (p1 == *p3) << endl;
  33.  
  34.     Packet_Pv packet_array[2][500];
  35.     packet_array[0][0] = *p3;
  36.     cout << "(p1 == packet_array[0][0])=" << (p1 == packet_array[0][0]) << endl;
  37.     
  38.     delete p3;
  39.  
  40.     cin.get();
  41.     return 0;
  42. }


Edit: les types ne sont donc probablement pas respecté BTW, c'est un peu au hasard :/


Message édité par IrmatDen le 16-07-2007 à 14:02:30
Reply

Marsh Posté le 16-07-2007 à 13:52:47    

ton operator== il est pas const ...

Reply

Marsh Posté le 16-07-2007 à 14:01:13    

Oups, merci, c'est corrigé :)

Reply

Marsh Posté le 16-07-2007 à 14:01:13   

Reply

Marsh Posté le 17-07-2007 à 09:15:46    

Je viens de trouver l'erreur, ca provenait du remplissage du tableau qui etait pas correct a chaque iteration.
l'operator == n'etait donc pas en cause.
 
Merci pour votre aide :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed