Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1047 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Probleme utilisation pointeur et reference

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme utilisation pointeur et reference

n°1586310
balabi
Posté le 13-07-2007 à 16:49:59  profilanswer
 

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
 
 

mood
Publicité
Posté le 13-07-2007 à 16:49:59  profilanswer
 

n°1586313
IrmatDen
Posté le 13-07-2007 à 16:54:28  profilanswer
 

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

n°1586420
balabi
Posté le 13-07-2007 à 21:26:12  profilanswer
 

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
 
 
 
 
 

n°1586474
IrmatDen
Posté le 14-07-2007 à 00:41:19  profilanswer
 

IrmatDen a écrit :

Si non, comment est-il construit?


;)

n°1586509
balabi
Posté le 14-07-2007 à 09:54:22  profilanswer
 


 
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.
 
 

n°1586538
IrmatDen
Posté le 14-07-2007 à 13:47:20  profilanswer
 

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...

n°1586899
balabi
Posté le 16-07-2007 à 09:58:19  profilanswer
 

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
n°1587056
IrmatDen
Posté le 16-07-2007 à 13:49:32  profilanswer
 

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
n°1587058
Taz
bisounours-codeur
Posté le 16-07-2007 à 13:52:47  profilanswer
 

ton operator== il est pas const ...

n°1587065
IrmatDen
Posté le 16-07-2007 à 14:01:13  profilanswer
 

Oups, merci, c'est corrigé :)

mood
Publicité
Posté le 16-07-2007 à 14:01:13  profilanswer
 

n°1587423
balabi
Posté le 17-07-2007 à 09:15:46  profilanswer
 

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 :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Probleme utilisation pointeur et reference

 

Sujets relatifs
[PHP] Probleme [RESOLU] :Form ne partant pas ...(Petit) problème avec un script !
Problème de débutant !! Hou le nuuuuuuuuuuul !!Pointeur de template
Problème de retour d'un tableau[ Oracle ] Vue et problème de droits
Utilisation du SelectedNodeProblème bindingSource/TabControl
problème recherchev(vlookup vba)Problème encodage PHP/XML/HTML
Plus de sujets relatifs à : Probleme utilisation pointeur et reference


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR