probleme de cast

probleme de cast - C++ - Programmation

Marsh Posté le 14-12-2004 à 16:54:18    

J'ai un probleme de cast avec le compilo HP (avec un compilo Sun ca marche).
 
J'ai une structure qui s'appelle pouet on va dire.
 
je veux caster pouet* en int pour l'utiliser dans une table de hash, mais le compilo m'envoie chier :
 
line 127: Error: Cannot cast from pouet* to int.
 
j'ai essaye de caster en void* avant de caster en int, meme combat :
 
line 127: Error: Cannot cast from void* to int.
 
 
Faut faire quoi pour que ca passe ? :D

Reply

Marsh Posté le 14-12-2004 à 16:54:18   

Reply

Marsh Posté le 14-12-2004 à 17:06:46    

Tu fais le cast comment ? Comme en C ou avec les trucs du C++ ? Essaie avec reinterpret_cast ; dans la doc de C++Builder ils disent "A pointer can be explicitly converted to an integral type.", reste à espérer que ça marche pareil chez toi :D


Message édité par antp le 14-12-2004 à 17:07:24

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 14-12-2004 à 17:08:00    

c'etait fait comme en C
je vais tenter le reinterpret_cast

Reply

Marsh Posté le 14-12-2004 à 17:08:00    

ouais tu le fait comment. Et surtout, t'es surquoi comme architecture ?

Reply

Marsh Posté le 14-12-2004 à 17:08:14    

Taz a écrit :

ouais tu le fait comment. Et surtout, t'es surquoi comme architecture ?

HP 64bits
tu penses que c'est parce qu'en 64 bits faudrait le caster en long ?


Message édité par joce le 14-12-2004 à 17:11:06
Reply

Marsh Posté le 14-12-2004 à 17:16:54    

oui. Et faut surtout faire attention à l'alignement.
 
long ou long long, selon le modèle.
 
Cela dit, qu'est-ce qui t'empêche de garder tes pointeurs tels quels ?

Reply

Marsh Posté le 14-12-2004 à 17:20:11    

Les int sont pas aussi en 64 bits sur une plateforme 64 bits ? :??:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 14-12-2004 à 17:20:15    

Taz a écrit :

oui. Et faut surtout faire attention à l'alignement.
 
long ou long long, selon le modèle.
 
Cela dit, qu'est-ce qui t'empêche de garder tes pointeurs tels quels ?

c'est pour utiliser dans une fonction de comparaison d'une hash.
En fait on caste pas en int a proprement parler mais en (voHashKey), mais bizarrement sous HP le voHashKey est un int, ce qui est pas forcement top :/
 
Qu'est ce que t'entends par long ou long long suivant le modele ?

Reply

Marsh Posté le 14-12-2004 à 17:20:34    

antp a écrit :

Les int sont pas aussi en 64 bits sur une plateforme 64 bits ? :??:

a priori non, c'est les long qui sont en 64 bits :??:

Reply

Marsh Posté le 14-12-2004 à 17:22:45    

joce a écrit :

HP 64bits
tu penses que c'est parce qu'en 64 bits faudrait le caster en long ?


 
size_t il est pas la pour ca ?

Reply

Marsh Posté le 14-12-2004 à 17:22:45   

Reply

Marsh Posté le 14-12-2004 à 17:24:50    

chrisbk a écrit :

size_t il est pas la pour ca ?

je suis pas responsable du layer pourri qu'il y a en dessous :/ (surtout quand je vois les commentaires :lol:)


Message édité par joce le 14-12-2004 à 17:25:04
Reply

Marsh Posté le 14-12-2004 à 17:30:54    

bin bonne chance, parce que caster du pointeur en entier, c'est pas forcement la meilleur chose a faire...

Reply

Marsh Posté le 14-12-2004 à 17:39:51    

chrisbk a écrit :

bin bonne chance, parce que caster du pointeur en entier, c'est pas forcement la meilleur chose a faire...


 
/*
 * For 64bit, we require a 64bit hash key. We'll use a typedef here,
 * to retain backward compatibility
 *
 * NB: (30 June 99) igf:
 *  I'm backing this out due to time contraints. Will switch on 64 bit later...
 */
 
[:ddr555]
 
tu m'etonnes que ca marche pas :o

Reply

Marsh Posté le 15-12-2004 à 11:56:24    

uintptr_t serait meme plus approprie que size_t pour ca

Reply

Marsh Posté le 15-12-2004 à 12:04:17    

pourquoi tu veux absolument mettre tes pointeurs dans des int ?

Reply

Marsh Posté le 15-12-2004 à 14:04:15    

uintptr_t c'est pas 32 bits a priori sur du HP64, c'est 64 bits (c'est un unsigned long)


Message édité par joce le 15-12-2004 à 14:05:48
Reply

Marsh Posté le 15-12-2004 à 14:09:04    

Taz a écrit :

pourquoi tu veux absolument mettre tes pointeurs dans des int ?


si j'ai bien compris, il a pas le choix

Reply

Marsh Posté le 15-12-2004 à 14:10:36    

non, mais ça d'accord, je veux juste comprendre pourquoi tu veux foutre tes pointeurs dans des entiers ?
 
tu peux très bien t'en servir de clef, avec une fonction de hash trivial ((p & 0xffffffff00000000ULL) >> 32) ^ (p & 0x00000000ffffffffULL) par exemple

Reply

Marsh Posté le 15-12-2004 à 14:13:19    

yep, mais je vais faire autrement en fait, merci :jap:

Reply

Sujets relatifs:

Leave a Replay

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