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

  FORUM HardWare.fr
  Programmation
  C++

  Problème de typage de pointeur de pointeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de typage de pointeur de pointeur

n°980092
peak
Posté le 13-02-2005 à 16:20:59  profilanswer
 

Salut,
j'ai une courte question :
 
Vous parait-il concevable que ceci soit accepté par un compilateur :

Code :
  1. HElem<View<PosType, ColorType, VortexType>* > *tmp= *(hashViewTable.searchElem(&cur_table_entry));


et pas cela :

Code :
  1. HElem<View<PosType, ColorType, VortexType>* > **tmp= (hashViewTable.searchElem(&cur_table_entry));


 
D'après moi c'est la même chose mais j'ai une erreur :
'tmp' : 'HElem<ValueType> *' differs in levels of indirection from 'HElem<ValueType> ** '
 
Je n'ai volontairement pas mis le contexte car ici ma question repose sur la différence entre ces deux lignes.
 
Comment, étant donné que la première assignation passe, la deuxième puisse elle poser un problème?
 
 :jap:


Message édité par peak le 13-02-2005 à 20:21:18
mood
Publicité
Posté le 13-02-2005 à 16:20:59  profilanswer
 

n°980099
Taz
bisounours-codeur
Posté le 13-02-2005 à 16:25:41  profilanswer
 

y a pas de niveau d'indirection qui tienne, c'est une histoire de typage. vérifie le type de ta rvalue et de ta lvalue

n°980105
Lam's
Profil: bas.
Posté le 13-02-2005 à 16:28:44  profilanswer
 

Ca m'a l'air d'être le cas classique d'un itérateur qui n'est pas un pointeur et qui n'accepte pas d'être casté en pointeur...
Donc searchElem ne retourne pas un pointeur, mais un objet dont l'opérateur "*" est redéfini.

n°980264
peak
Posté le 13-02-2005 à 20:20:30  profilanswer
 

Mais si ma lvalue et rvalue n'étaient pas compatibles la première assignation ne devrait pas marcher, non?
 
Je n'ai pas redéfini d'opérateur non plus.
 
Ce qui m'étonne ici c'est que si j'assigne un pointeur à ce sur quoi pointe un pointeur (ce qui marche) , c'est que c'est un pointeur de pointeur or quand je l'assigne à un pointeur de pointeur ça compile plus.  :??:  
Ca ma juste l'aire très mystérieux....
Je pourrait me satisfaire de la solution1 mais le prob c'est si ma fonction searchElem renvoit NULL  :D  
Donc pour l'instant, je le fait simplement en appelant deux fois de suite searchElem et en testant la première fois si c'est NULL et si ça l'est pas je le reassigne avec la premier solution ; ce qui est pitoyable. :sweat:

n°980292
Taz
bisounours-codeur
Posté le 13-02-2005 à 20:42:42  profilanswer
 

Peak a écrit :

Mais si ma lvalue et rvalue n'étaient pas compatibles la première assignation ne devrait pas marcher, non?


pas forcément. vérifie

n°980603
peak
Posté le 14-02-2005 à 00:18:58  profilanswer
 

Il me semble que c'est correct d'un point de vue des r et l-values mais j'ai changé de technique en remplaçant les pointeurs d'éléments de ma table par des éléments (pointeur->référence). Je pensais pas pouvoir m'en sortir comme ça, mais apparemment ça marche. :)

Code :
  1. HashTable< HElem<View<PosType, ColorType, VortexType>* > > hashViewTable(HASHVIEW_NBR_SLOT);
  2. //HashTable< HElem<View<PosType, ColorType, VortexType>* >* > hashViewTable(HASHVIEW_NBR_SLOT);
  3. HElem<View<PosType, ColorType, VortexType>* >* HElem_ptr= hashViewTable.searchElem(cur_table_entry);


(De plus c'est moins gros en taille mémoire et plus lisible.)
 

Taz a écrit :

pas forcément. vérifie


En fait c'est ça qui m'intrigue; d'après moi c'était justement "forcement".
Comme le premier passe, je pensais pouvoir en déduire que les types étaient compatibles :sweat:, mais apparement mon compilateur pense comme toi.  :ange:  

n°980692
lsdYoYo
gravity powered
Posté le 14-02-2005 à 09:16:07  profilanswer
 

Peak a écrit :

Code :
  1. HElem<View<PosType, ColorType, VortexType>* > *tmp= *(hashViewTable.searchElem(&cur_table_entry));
Code :
  1. HElem<View<PosType, ColorType, VortexType>* > **tmp= (hashViewTable.searchElem(&cur_table_entry));




As-tu essayé de le faire en 2 temps ?

Code :
  1. HElem<View<PosType, ColorType, VortexType>* > *tmp= *(hashViewTable.searchElem(&cur_table_entry));
  2. HElem<View<PosType, ColorType, VortexType>* > **tmp2 = &tmp;


Ca te donneras des indications de ce qui coinçait.

n°980695
Taz
bisounours-codeur
Posté le 14-02-2005 à 09:19:55  profilanswer
 

vas y rajoute des * jusqu'à que ça marche ...
On te demande de faire une résolution de type à priori, pas un 'ça doit être ça'

n°982810
peak
Posté le 15-02-2005 à 21:53:57  profilanswer
 

excusez cette petite latence...
 
C'est vrai que j'avais pas pensé à le couper en deux.
Maintenant le problème c'est que j'arrive plus à générer l'erreur.
Les deux marchent.  :sweat:  
Non je vous jure j'ai pas rêvé.
J'aurai du garder une copie quand ça plantait.
Ca gâche un peu mon poste.
Désolé.
Merci pour vos conseils.


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

  Problème de typage de pointeur de pointeur

 

Sujets relatifs
[J2ME] probleme de code réseau[php] Probleme de conception - sessions/cookie&co
Est-il possible de positionner automatiquement le pointeur de souris ?[Perl] Probleme de fork & serveur socket
Probleme compatibilité W3C XHTML!!! Gros problème site web !!!
[Resolu] Problème de DIV avec un "padding" et un "display: inline;"[PERL] Probleme avec LWP et UserAgent dans PurePerl
Excel : problème de sauvegarde de formulaireproblème avec wxScrolledWindow
Plus de sujets relatifs à : Problème de typage de pointeur de pointeur


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