J' essaye d' utiliser les références pour retourner un pointeur. En
fait, j' ai une classe qui possède un pointeur, et je voudrais
implementer une fonction "get" pour le pointeur. J' ai essayé de faire
comme ceci (ma classe se nomme "CASE", le pointeur appartenant à ma
classe se nomme "top"):
void CASE::getC(CASE& R)
{
R = *top;
return;
}
//main, myCase est une instanciation de la classe CASE
CASE test();
myCase.getC(1, test);
cout << test.num << endl;
Mais cela ne marche pas ! Quelqu' un aurait une idée svp ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Sylvain
dnanar wrote on 13/04/2006 21:48:
J' essaye d' utiliser les références pour retourner un pointeur. En fait, j' ai une classe qui possède un pointeur, et je voudrais implementer une fonction "get" pour le pointeur.
le point est: voulez vous retourner le *pointeur* membre (ce qui autorise les cas où ce pointeur est null, mais force le test par le client) ou une référence sur l'instance pointée (dans ce cas le client utilise sans déréférencer mais la fonction ne peut plus gérer le cas où lepointeur est null (sauf exception ou allocation à la demande, les 2 peuvent ne pas être acceptable).
glup, j'ai lu "fonction" sans voir votre prototype, donc c'est une procédure.
J' ai essayé de faire comme ceci (ma classe se nomme "CASE", le pointeur appartenant à ma classe se nomme "top"):
void CASE::getC(CASE& R) { R = *top; return; }
que pensez vous qu'il advient si vous n'insérez pas un "return" ?? le code va continuer à la ligne suivante ?
CASE test();
ceci déclare une fonction nommée test qui retourne une instance de CASE, vous ne vouliez pas faire cela, mais juste déclarer une instance, donc:
CASE test;
myCase.getC(1, test);
fonctionnera avec le chgt ci-avant, mais pourquoi ne pas écrire:
struct CASE { int num; CASE* top; [const] CASE& getC() const { return *top; } };
CASE& test = myCase.getC();
voire: cout << myCase.getC().num;
Sylvain.
dnanar wrote on 13/04/2006 21:48:
J' essaye d' utiliser les références pour retourner un pointeur. En
fait, j' ai une classe qui possède un pointeur, et je voudrais
implementer une fonction "get" pour le pointeur.
le point est: voulez vous retourner le *pointeur* membre (ce qui
autorise les cas où ce pointeur est null, mais force le test par le
client) ou une référence sur l'instance pointée (dans ce cas le client
utilise sans déréférencer mais la fonction ne peut plus gérer le cas où
lepointeur est null (sauf exception ou allocation à la demande, les 2
peuvent ne pas être acceptable).
glup, j'ai lu "fonction" sans voir votre prototype, donc c'est une
procédure.
J' ai essayé de faire comme ceci (ma classe se
nomme "CASE", le pointeur appartenant à ma
classe se nomme "top"):
void CASE::getC(CASE& R)
{
R = *top;
return;
}
que pensez vous qu'il advient si vous n'insérez pas un "return" ??
le code va continuer à la ligne suivante ?
CASE test();
ceci déclare une fonction nommée test qui retourne une instance de CASE,
vous ne vouliez pas faire cela, mais juste déclarer une instance, donc:
CASE test;
myCase.getC(1, test);
fonctionnera avec le chgt ci-avant, mais pourquoi ne pas écrire:
struct CASE {
int num;
CASE* top;
[const] CASE& getC() const {
return *top;
}
};
J' essaye d' utiliser les références pour retourner un pointeur. En fait, j' ai une classe qui possède un pointeur, et je voudrais implementer une fonction "get" pour le pointeur.
le point est: voulez vous retourner le *pointeur* membre (ce qui autorise les cas où ce pointeur est null, mais force le test par le client) ou une référence sur l'instance pointée (dans ce cas le client utilise sans déréférencer mais la fonction ne peut plus gérer le cas où lepointeur est null (sauf exception ou allocation à la demande, les 2 peuvent ne pas être acceptable).
glup, j'ai lu "fonction" sans voir votre prototype, donc c'est une procédure.
J' ai essayé de faire comme ceci (ma classe se nomme "CASE", le pointeur appartenant à ma classe se nomme "top"):
void CASE::getC(CASE& R) { R = *top; return; }
que pensez vous qu'il advient si vous n'insérez pas un "return" ?? le code va continuer à la ligne suivante ?
CASE test();
ceci déclare une fonction nommée test qui retourne une instance de CASE, vous ne vouliez pas faire cela, mais juste déclarer une instance, donc:
CASE test;
myCase.getC(1, test);
fonctionnera avec le chgt ci-avant, mais pourquoi ne pas écrire:
struct CASE { int num; CASE* top; [const] CASE& getC() const { return *top; } };