j ai un petit gaga que je comprend pas bien.
J ai créé une classe du type :
class Noeud {
...
vector<Noeud*> fils_
...
vector<Noeud*> getFils() { return fils_;}
}
je me construit un petit arbre, dont le noeud racine est la racine et je
veux le voir. je met NULL comme premeir pointeur si pas de fils
si j'ecris:
cout << ((racine.getFils()[0])->getFils()[0])->getFils()[0]
J'obtiens le NULL que je cherche, tout est normal.
Mais si j ecris :
ptr=&racine;
ptr = ptr->getFils()[0];
ptr = ptr->getFils()[0];
ptr = ptr->getFils()[0]; (je devrais etre au memme niveau que dans l
expression precedente il me semble)
et cout << ptr;
j obtiens pas NULL, or je devrais bien obtenir la meme chose que
precedement non ?
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 Togni
si j'ecris:
cout << ((racine.getFils()[0])->getFils()[0])->getFils()[0] J'obtiens le NULL que je cherche, tout est normal.
Mais si j ecris :
ptr=&racine; ptr = ptr->getFils()[0]; ptr = ptr->getFils()[0]; ptr = ptr->getFils()[0]; (je devrais etre au memme niveau que dans l expression precedente il me semble) et cout << ptr; j obtiens pas NULL, or je devrais bien obtenir la meme chose que precedement non ?
Les deux écritures sont équivalentes, elles contiennent trois appels à getFils()[0] en cascade.
L'erreur doit-être ailleurs. Est-tu sûr que tous les noeuds contiennent au moins un fils (même NULL) ? Le constructeur de copie et l'opérateur d'affectation de la classe noeud sont-ils bien définis (copie profonde ou déclarés private) ?
D'ailleurs, pourquoi utiliser un fils NULL ? Une feuille pourrait être tout simple un noeud sans fils. Aussi, si les noeuds ne sont pas polymorphes, j'utiliserai un vector<Noeud> plutôt qu'un vector<Noeud*>.
-- Sylvain Togni
si j'ecris:
cout << ((racine.getFils()[0])->getFils()[0])->getFils()[0]
J'obtiens le NULL que je cherche, tout est normal.
Mais si j ecris :
ptr=&racine;
ptr = ptr->getFils()[0];
ptr = ptr->getFils()[0];
ptr = ptr->getFils()[0]; (je devrais etre au memme niveau que dans l
expression precedente il me semble)
et cout << ptr;
j obtiens pas NULL, or je devrais bien obtenir la meme chose que
precedement non ?
Les deux écritures sont équivalentes, elles contiennent trois
appels à getFils()[0] en cascade.
L'erreur doit-être ailleurs. Est-tu sûr que tous les noeuds
contiennent au moins un fils (même NULL) ? Le constructeur de
copie et l'opérateur d'affectation de la classe noeud sont-ils
bien définis (copie profonde ou déclarés private) ?
D'ailleurs, pourquoi utiliser un fils NULL ? Une feuille
pourrait être tout simple un noeud sans fils. Aussi, si les
noeuds ne sont pas polymorphes, j'utiliserai un vector<Noeud>
plutôt qu'un vector<Noeud*>.
cout << ((racine.getFils()[0])->getFils()[0])->getFils()[0] J'obtiens le NULL que je cherche, tout est normal.
Mais si j ecris :
ptr=&racine; ptr = ptr->getFils()[0]; ptr = ptr->getFils()[0]; ptr = ptr->getFils()[0]; (je devrais etre au memme niveau que dans l expression precedente il me semble) et cout << ptr; j obtiens pas NULL, or je devrais bien obtenir la meme chose que precedement non ?
Les deux écritures sont équivalentes, elles contiennent trois appels à getFils()[0] en cascade.
L'erreur doit-être ailleurs. Est-tu sûr que tous les noeuds contiennent au moins un fils (même NULL) ? Le constructeur de copie et l'opérateur d'affectation de la classe noeud sont-ils bien définis (copie profonde ou déclarés private) ?
D'ailleurs, pourquoi utiliser un fils NULL ? Une feuille pourrait être tout simple un noeud sans fils. Aussi, si les noeuds ne sont pas polymorphes, j'utiliserai un vector<Noeud> plutôt qu'un vector<Noeud*>.
-- Sylvain Togni
eric
bonjour
merci de ta réponse
L'erreur doit-être ailleurs. Est-tu sûr que tous les noeuds contiennent au moins un fils (même NULL) ?
err a vue de nez, je pense que le problème était là... j'ai rajouté un ajout de fils NULL et cela fonctionne ...
D'ailleurs, pourquoi utiliser un fils NULL ? Une feuille pourrait être tout simple un noeud sans fils.
je pensais que cela serait plus ismple pour les test... (style tant que pas NULL ...)
Aussi, si les noeuds ne sont pas polymorphes, j'utiliserai un vector<Noeud> plutôt qu'un vector<Noeud*>.
oui effectivement, au début, je pensait que les feuilles seraient différents des noeuds, par la suite la feuille est devenue unnoeud normal... De fait il n'y a plus polymorphisme... Par habitude, dès que j 'utilise de grosses structures, je met un pointeur ;)
bonjour
merci de ta réponse
L'erreur doit-être ailleurs. Est-tu sûr que tous les noeuds
contiennent au moins un fils (même NULL) ?
err a vue de nez, je pense que le problème était là...
j'ai rajouté un ajout de fils NULL et cela fonctionne ...
D'ailleurs, pourquoi utiliser un fils NULL ? Une feuille
pourrait être tout simple un noeud sans fils.
je pensais que cela serait plus ismple pour les test... (style tant que
pas NULL ...)
Aussi, si les
noeuds ne sont pas polymorphes, j'utiliserai un vector<Noeud>
plutôt qu'un vector<Noeud*>.
oui effectivement, au début, je pensait que les feuilles seraient
différents des noeuds, par la suite la feuille est devenue unnoeud
normal...
De fait il n'y a plus polymorphisme...
Par habitude, dès que j 'utilise de grosses structures, je met un
pointeur ;)
L'erreur doit-être ailleurs. Est-tu sûr que tous les noeuds contiennent au moins un fils (même NULL) ?
err a vue de nez, je pense que le problème était là... j'ai rajouté un ajout de fils NULL et cela fonctionne ...
D'ailleurs, pourquoi utiliser un fils NULL ? Une feuille pourrait être tout simple un noeud sans fils.
je pensais que cela serait plus ismple pour les test... (style tant que pas NULL ...)
Aussi, si les noeuds ne sont pas polymorphes, j'utiliserai un vector<Noeud> plutôt qu'un vector<Noeud*>.
oui effectivement, au début, je pensait que les feuilles seraient différents des noeuds, par la suite la feuille est devenue unnoeud normal... De fait il n'y a plus polymorphisme... Par habitude, dès que j 'utilise de grosses structures, je met un pointeur ;)