Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/03/2007, à 23:50

amwus

[Résolu]retour de fonction void*

Bonjour à tous !

Voila, il y a un léger problème sur lequel je planche.
J'ai une fonction dont le type est void*  (void* fonction()), et cette fonction retourne une valeur de type void*.

De quel type doit etre la variable qui reçoit la valeur de cette fonction ?

Imaginons que je veux recevoir la valeur déterminée par la fonction dans une variable de type double, comment dois je m'y prendre ?
si je fait double a = fonction(); ça me retourne une erreur...

Merci d'avance !
smile

Dernière modification par amwus (Le 18/03/2007, à 01:09)


Black holes are where god divided by zero...

Hors ligne

#2 Le 18/03/2007, à 00:18

tiky

Re : [Résolu]retour de fonction void*

C'est normal que double a = fonction(); ne marche pas vu que tu retourne un pointeur et la tu stock le retour dans un type double ( qui fait 8 octets ) et un pointeur sur une machine 32 bits prend 4 octets, en plus de cela le compilateur n'autorise pas ce type d'opération qui n'est pas logique...

Donc ça sera plûtot:
double * a = fonction();

Autre détail, la conversion du type void * en un autre type n'est implicite que en C. Cependant tu peux toujours utiliser un cast.
double * a = ( double * )fonction();

Les compilateurs C++ eux refusent la conversion implicite d'un pointeur void * tu dois alors utiliser un cast C ou C++:
double * a = static_cast<double *> fonction();

Voilà j'espère avoir répondu à ta question ^^


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#3 Le 18/03/2007, à 01:09

amwus

Re : [Résolu]retour de fonction void*

Super ça marche wink !

merci du tuyaux smile


Black holes are where god divided by zero...

Hors ligne

#4 Le 18/03/2007, à 01:30

otheym

Re : [Résolu]retour de fonction void*

Heu, tu arrives à récupérer un résultat d'un void ?
tes zard toi, les fonctions avec un void de retour est une fonction ne renvoyant pas de résultat.
Dans ton cas, au lieu d'un void* donc pointeur sur un void, vu que ta variable est un double, fait renvoyer un double à ta fonction, et oublis pas à la fin de la fonction de faire

return lerésultat

.


Va plutôt lire les cours de C et C++ ici: http://www.siteduzero.com tu verras que ta méthode n'est pas la bonne.


Aelita, je te promet que l'ont pourra bientôt vivre tous les deux.
Je te le jure mon amour.

Hors ligne

#5 Le 18/03/2007, à 18:09

tiky

Re : [Résolu]retour de fonction void*

@otheym: Il renvoit pas un void mais un void *, c'est totalement différent, un void signifie que l'on renvoie aucune donnée tandis que un void * signifie que l'on renvoie un pointeur sur une variable dont le type est connu. C'est donc au programmeur de connaître le type de la variable selon un contexte qu'il a bien défini. C'est pour cela que l'usage du type void * est fortement déconseillé mais il est parfois la seule solution. Ici il est évident que la fonction devrait retournée un double * plutôt qu'un void * mais peut-être que celle-ci doit retourner autre chose dans un contexte différent.


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#6 Le 18/03/2007, à 22:13

amwus

Re : [Résolu]retour de fonction void*

et c'est bien le cas. Pour que le code de ma librairie soit compatible avec tout programme, il doit pouvoir fonctionner avec n'importe quel type. Donc ici, le void* s'impose smile


Black holes are where god divided by zero...

Hors ligne

#7 Le 18/03/2007, à 23:36

tiky

Re : [Résolu]retour de fonction void*

Tu codes en C ou C++ ?
Si tu codes en C++, je te conseille d'utiliser plutôt des templates smile


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#8 Le 19/03/2007, à 07:26

benlaug

Re : [Résolu]retour de fonction void*

@amwus : Dit espèce de gros flemmard, tu te foules pas beaucoup pour ton projet 6 tongue

Hors ligne