Bonsoir à tous,
J'ai créé une classe template "arbre" qui contient deux attributs :
- T data
- std::vector<arbre*> fils
J'ai défini les méthodes permettant l'écriture et la lecture premier attribut de type int ainsi que des éléments du deuxème attribut de type vector. Maintenant, je suis entrain de coder une fonction qui affiche le contenu des noeuds (la valeur de data) en largeur.
Voilà ce que j'ai écrit C++ :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| void arbre<T>::afficher()const
{
std::vector<arbre<T>*> q;
q.push_back(this);
arbre<T>* tete;
while(q.size()!=0)
{
std::cout<<q[0]->getData()<<"\t";
tete=q[0];
q.erase(q.begin());
for (int i=0; i<(tete->fils).size(); i++)
q.push_back(tete->getFils(i));
}
} |
J'utilise cette méthode dans le main comme suit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| int main(int argc, const char * argv[])
{
arbre<int>* racine=new arbre<int>(22);
racine->enfileFils(new arbre<int>(18)); // noeud 0
racine->enfileFils(new arbre<int>(23)); // noeud 1
// Fils du noeud 0
(racine->getFils(0))->enfileFils(new arbre<int>(4));
(racine->getFils(0))->enfileFils(new arbre<int>(9));
// Fils du noeud 1
(racine->getFils(1))->enfileFils(new arbre<int>(17)); // noeud 4
// Fils du noeud 4
((racine->getFils(1))->getFils(0))->enfileFils(new arbre<int>(15));
racine->affiche();
return 0;
} |
Xcode pointe alors une erreur sur la ligne 4 (du premier bloc de code) et me dit :
"Reference to type 'const value_type' (aka 'arbre<int> *const') could not bind to an revalue of type 'const arbre<int> *'".
Cela me parait bizarre car this a bien le type arbre<T>* que je déclare pour q .
Si vous pouvez m'éclairer là dessus, ce serait super !
Bien à vous.
Partager