void main() { int_maillon *test; test = new int_maillon; std::cout << "--[Test des listes chainées]--" << std::endl; std::cin >> *test.valeur;
Problème de priorité des operateurs: ce que tu as écris est équivalent à *(test.valeur) alors que tu voulais surement (*test).valeur
std::cout << *test.valeur; }
Mais je n'arrive pas à accéder à *test.valeur, comment faire ?
-> est ton ami.
Marc Boyer -- Lying for having sex or lying for making war? Trust US presidents :-(
Keon
Ce que Marc Broyer t'as dit est juste. Mais dans ton main, tu ne donne pas de valeur au membre valeur, c'est peut-être voulu, enfin, tu peux te passser de mettre toujours std::cout. Il te suffit en fonction de l'implémentation du compilateur, soit de mettre #include <iostream> ou #include <iostream.h> et d'ajouter la ligne using namespace std; juste en-dessous de iostream.
Ce que Marc Broyer t'as dit est juste. Mais dans ton main, tu ne donne pas
de valeur au membre valeur, c'est peut-être voulu, enfin, tu peux te passser
de mettre toujours std::cout. Il te suffit en fonction de l'implémentation
du compilateur, soit de mettre #include <iostream> ou #include <iostream.h>
et d'ajouter la ligne using namespace std; juste en-dessous de iostream.
Ce que Marc Broyer t'as dit est juste. Mais dans ton main, tu ne donne pas de valeur au membre valeur, c'est peut-être voulu, enfin, tu peux te passser de mettre toujours std::cout. Il te suffit en fonction de l'implémentation du compilateur, soit de mettre #include <iostream> ou #include <iostream.h> et d'ajouter la ligne using namespace std; juste en-dessous de iostream.
Jean-Marc Molina
Bonsoir,
Tu débutes ? Quelle chance tu as de nous avoir sous la main :p (ça pourrait être pire ^^)
Comme l'a dit Keon, tu devrais initialiser l'attribut valeur de ta classe int_maillon.
Quelques règles fondamentales : - ne jamais mettre un attribut en public, toujours en protected/private (sinon n'importe qui peut affecter n'importe quoi à n'importe quoi, NULL à tes pointeurs par exemple) - utiliser un accesseur pour accéder ou modifier les attributs (pseudo concept d'encapsulation : get_attribut (), set_attribut ()) - toujours initialiser les attributs à l'aide du constructeur, surtout pour des pointeurs (prec et suiv à NULL). Quand un pointeur est utilisé comme tu le fais (ce qui peut marcher sous Visual C++ en mode Debug car certains espaces mémoire sont à ZERO donc NULL), on dit qu'il est fou (le pointeur, pas toi :p). C'est très grave car certaines applications plantent justement à cause de ça ! en Debug tout va bien puis en Release, fling flong! - utiliser l'opérateur -> pour accéder aux éléments pointés par un pointeur : test->valeur et pas (* test).valeur, ce qui revient à "créer" une référence (* test) pour accéder à l'élement valeur pointé par le pointeur test (un peu lourd, non ?)
Au final ta classe pourrait ressembler à ça (en simplifiant, j'en ai déjà trop dit :p) : class int_maillon { private : int valeur; int_maillon *prec, *suiv; public : // Une liste d'init serait la bienvenue mais ne compliquons pas les choses pour le plaisir :p int_maillon () { valeur = 0; prec = NULL; suiv = NULL; } int get_valeur () const { return (valeur); } };
L'implémentation n'est pas importante ce sont les règles et concepts qui le sont. Je pense à l'utilisation d'une liste d'init pour les attributs ou le petit const que tu trouves sur la fonction get_valeur (const car on ne modifie pas un attribut de la classe, on retourne simplement une valeur...), on aurait pu parler du destructeur mais bon... Déjà si tu initialises bien tes attributs pour éviter les valeurs ou pointeurs fous, ça sera un grand pas pour tes phases de déboguage :)
JM
-- Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Bonsoir,
Tu débutes ? Quelle chance tu as de nous avoir sous la main :p (ça pourrait
être pire ^^)
Comme l'a dit Keon, tu devrais initialiser l'attribut valeur de ta classe
int_maillon.
Quelques règles fondamentales :
- ne jamais mettre un attribut en public, toujours en protected/private
(sinon n'importe qui peut affecter n'importe quoi à n'importe quoi, NULL à
tes pointeurs par exemple)
- utiliser un accesseur pour accéder ou modifier les attributs (pseudo
concept d'encapsulation : get_attribut (), set_attribut ())
- toujours initialiser les attributs à l'aide du constructeur, surtout pour
des pointeurs (prec et suiv à NULL). Quand un pointeur est utilisé comme tu
le fais (ce qui peut marcher sous Visual C++ en mode Debug car certains
espaces mémoire sont à ZERO donc NULL), on dit qu'il est fou (le pointeur,
pas toi :p). C'est très grave car certaines applications plantent justement
à cause de ça ! en Debug tout va bien puis en Release, fling flong!
- utiliser l'opérateur -> pour accéder aux éléments pointés par un pointeur
: test->valeur et pas (* test).valeur, ce qui revient à "créer" une
référence (* test) pour accéder à l'élement valeur pointé par le pointeur
test (un peu lourd, non ?)
Au final ta classe pourrait ressembler à ça (en simplifiant, j'en ai déjà
trop dit :p) :
class int_maillon
{
private :
int valeur;
int_maillon *prec, *suiv;
public :
// Une liste d'init serait la bienvenue mais ne compliquons pas les
choses pour le plaisir :p
int_maillon ()
{
valeur = 0;
prec = NULL;
suiv = NULL;
}
int get_valeur () const
{
return (valeur);
}
};
L'implémentation n'est pas importante ce sont les règles et concepts qui le
sont. Je pense à l'utilisation d'une liste d'init pour les attributs ou le
petit const que tu trouves sur la fonction get_valeur (const car on ne
modifie pas un attribut de la classe, on retourne simplement une valeur...),
on aurait pu parler du destructeur mais bon... Déjà si tu initialises bien
tes attributs pour éviter les valeurs ou pointeurs fous, ça sera un grand
pas pour tes phases de déboguage :)
JM
--
Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
Tu débutes ? Quelle chance tu as de nous avoir sous la main :p (ça pourrait être pire ^^)
Comme l'a dit Keon, tu devrais initialiser l'attribut valeur de ta classe int_maillon.
Quelques règles fondamentales : - ne jamais mettre un attribut en public, toujours en protected/private (sinon n'importe qui peut affecter n'importe quoi à n'importe quoi, NULL à tes pointeurs par exemple) - utiliser un accesseur pour accéder ou modifier les attributs (pseudo concept d'encapsulation : get_attribut (), set_attribut ()) - toujours initialiser les attributs à l'aide du constructeur, surtout pour des pointeurs (prec et suiv à NULL). Quand un pointeur est utilisé comme tu le fais (ce qui peut marcher sous Visual C++ en mode Debug car certains espaces mémoire sont à ZERO donc NULL), on dit qu'il est fou (le pointeur, pas toi :p). C'est très grave car certaines applications plantent justement à cause de ça ! en Debug tout va bien puis en Release, fling flong! - utiliser l'opérateur -> pour accéder aux éléments pointés par un pointeur : test->valeur et pas (* test).valeur, ce qui revient à "créer" une référence (* test) pour accéder à l'élement valeur pointé par le pointeur test (un peu lourd, non ?)
Au final ta classe pourrait ressembler à ça (en simplifiant, j'en ai déjà trop dit :p) : class int_maillon { private : int valeur; int_maillon *prec, *suiv; public : // Une liste d'init serait la bienvenue mais ne compliquons pas les choses pour le plaisir :p int_maillon () { valeur = 0; prec = NULL; suiv = NULL; } int get_valeur () const { return (valeur); } };
L'implémentation n'est pas importante ce sont les règles et concepts qui le sont. Je pense à l'utilisation d'une liste d'init pour les attributs ou le petit const que tu trouves sur la fonction get_valeur (const car on ne modifie pas un attribut de la classe, on retourne simplement une valeur...), on aurait pu parler du destructeur mais bon... Déjà si tu initialises bien tes attributs pour éviter les valeurs ou pointeurs fous, ça sera un grand pas pour tes phases de déboguage :)
JM
-- Clé AntiPourriel : PASUNPOURRIEL (ne pas retirer)
XecTech
Lol, oui, je suis débutant (enfin, là, pas besoin de s'appeler Jean Charles pour le voir), et non, ce ne sont pas des devoirs, j'aprends juste le C++ par moi-même.
Merci à tous pour vos indications qui m'ont beaucoups appris!
"Philippe Guglielmetti" a écrit dans le message de news:3f98bacf$0$3675$
std::cin >> (*test).valeur; // ou std::cout << test->valeur;
débutant, hein ? on va pas toujours faire tes devoirs scolaires ;-) -- Philippe Guglielmetti - www.dynabits.com
Lol, oui, je suis débutant (enfin, là, pas besoin de s'appeler Jean Charles
pour le voir), et non, ce ne sont pas des devoirs, j'aprends juste le C++
par moi-même.
Merci à tous pour vos indications qui m'ont beaucoups appris!
"Philippe Guglielmetti" <news@dynabits.com> a écrit dans le message de
news:3f98bacf$0$3675$5402220f@news.sunrise.ch...
Lol, oui, je suis débutant (enfin, là, pas besoin de s'appeler Jean Charles pour le voir), et non, ce ne sont pas des devoirs, j'aprends juste le C++ par moi-même.
Merci à tous pour vos indications qui m'ont beaucoups appris!
"Philippe Guglielmetti" a écrit dans le message de news:3f98bacf$0$3675$