problème avec les pointeurs

Le
3dsman
salut a tous.
Je suis entrains de reprendre un programme que j'ai ecris il y a quelque
temps pour l'ameliorer et je suis tombé sur un probleme avec les pointeurs.
Je vais simplifier mon code pour que ce soit pas trop galere a
comprendre :-)

en gros avant j'avais ca:

void toto1(void* Result)
{
Image=(FIBITMAP*) Result;
load(Image);
}
void toto2()
{
FIBITMAP *Image = cree_image_vide();
toto1( &Image);
image->sauve_image();
}


la fonction toto2 crééait une image vide puis appelait toto1 pour la
remplir.
aujourd'hui je dois créer l'image dans toto1 qui doit renvoyer le
resulat a toto2.
donc j'ai essayé un truc comme ca qui evidement ne marche pas:

void toto1(void* Result)
{
Result = load(Image);
}
void toto2()
{
FIBITMAP *Image;
toto1( &Image);
image->sauve_image();
}

la fonction load() crée le FIBITMAP et me renvoie un pointeur dessus.
je ne peut pas retourner le resultat avec return.

quelqu'un aurait une idée?
merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Serge Paccalin
Le #22890851
Le Mon, 06 Dec 2010 17:06:35 +0100, 3dsman a écrit
(dans  dans fr.comp.lang.c++) :

salut a tous.
Je suis entrains de reprendre un programme que j'ai ecris il y a quelque
temps pour l'ameliorer et je suis tombé sur un probleme avec les pointeurs.
Je vais simplifier mon code pour que ce soit pas trop galere a
comprendre :-)

en gros avant j'avais ca:

void toto1(void* Result)
{
Image=(FIBITMAP*) Result;
load(Image);
}
void toto2()
{
FIBITMAP *Image = cree_image_vide();
toto1( &Image);
image->sauve_image();
}

la fonction toto2 crééait une image vide puis appelait toto1 pour la
remplir.
aujourd'hui je dois créer l'image dans toto1 qui doit renvoyer le
resulat a toto2.
donc j'ai essayé un truc comme ca qui evidement ne marche pas:

void toto1(void* Result)
{
Result = load(Image);
}
void toto2()
{
FIBITMAP *Image;
toto1( &Image);
image->sauve_image();
}

la fonction load() crée le FIBITMAP et me renvoie un pointeur dessus.
je ne peut pas retourner le resultat avec return.

quelqu'un aurait une idée?



Le paramètre de toto1() ne pourrait pas avoir le bon type ? Ou au moins
une classe de base ?

À part ça, j'essaierais un passage par référence dans toto1().

void toto1(void*& Result)
{
FIBITMAP* Image = cree_image_vide();
load(Image);
Result = Image;
}

void toto2()
{
FIBITMAP* Image = 0;
toto1(Image);
Image->sauve_image();
}

--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
Alexandre Bacquart
Le #22890991
On 12/06/2010 05:06 PM, 3dsman wrote:
salut a tous.
Je suis entrains de reprendre un programme que j'ai ecris il y a quelque
temps pour l'ameliorer et je suis tombé sur un probleme avec les pointeurs.
Je vais simplifier mon code pour que ce soit pas trop galere a
comprendre :-)

en gros avant j'avais ca:

void toto1(void* Result)
{
Image=(FIBITMAP*) Result;



Cast pas très beau, mais admettons pour l'exemple.

load(Image);
}
void toto2()
{
FIBITMAP *Image = cree_image_vide();
toto1( &Image);



Ici, tu envoies un pointeur sur un pointeur sur l'image (et non pas un
pointeur sur l'image). Enlever le &.

image->sauve_image();
}



La variable Image est déclarée avec un I majuscule. J'en conclus que tu
as simplifié à la main sans vérifier, ce qui est souvent une mauvaise
idée. Tu devrais plutôt poster le code original, ou simplifier en
testant avec le compilo, car on ne sait plus si ton erreur vient d'une
faute de frappe ou autre chose.

la fonction toto2 crééait une image vide puis appelait toto1 pour la
remplir.
aujourd'hui je dois créer l'image dans toto1 qui doit renvoyer le
resulat a toto2.
donc j'ai essayé un truc comme ca qui evidement ne marche pas:

void toto1(void* Result)
{
Result = load(Image);
}
void toto2()
{
FIBITMAP *Image;
toto1( &Image);
image->sauve_image();
}



Mêmes remarques. De plus, le Image dans load(Image) ne pourrait pas
compiler puisque Image n'est pas dans la portée de la fonction.

la fonction load() crée le FIBITMAP et me renvoie un pointeur dessus.
je ne peut pas retourner le resultat avec return.



Pourquoi ?

FIBITMAP *toto1()
{
return load(Image);
}

void toto2()
{
FIBITMAP *Image = toto1();
Image->sauve_image();
}

Mais il y a toujours ce hic avec Image qui n'est pas dans la portée.

quelqu'un aurait une idée?



C'est un problème C avant d'être un problème C++. Peut-être fuir les
pointeurs et utiliser les classes et les références. Le code complet
serait mieux pour faire un diagnostic, car il y a clairement un problème
de conception.


--
Alex
espie
Le #22891031
In article 3dsman
salut a tous.
Je suis entrains de reprendre un programme que j'ai ecris il y a quelque
temps pour l'ameliorer et je suis tombé sur un probleme avec les pointeurs.
Je vais simplifier mon code pour que ce soit pas trop galere a
comprendre :-)

en gros avant j'avais ca:

void toto1(void* Result)
{
Image=(FIBITMAP*) Result;
load(Image);
}
void toto2()
{
FIBITMAP *Image = cree_image_vide();
toto1( &Image);
image->sauve_image();
}



Les cast, c'est mal, surtout en C++. Dans ton exemple, on ne comprend vraiment
pas pourquoi tu passes par void *, mais surtout, il y a une erreur de
typage malgre tout, puisque tu termines avec un FIBITMAP** caste en FIBITMAP*

Commence par nettoyer ce bordel ou nous filer un exemple fonctionnel, on
en reparle ensuite.
Publicité
Poster une réponse
Anonyme