Bonjour,
je cherche mais ne trouve pas la cause de 2 erreurs de ce programme :
error C2668: 'insert' : ambiguous call to overloaded function
cette erreur survient lors des 2 appels de la fonction insert par récursivité.
Merci de votre aide !!!
#include <iostream>
#include <list>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
struct motligne;
typedef motligne *arbin; // def de l'arbre
struct motligne
{
string mot; // structure arborescente pr ordre alphabétique ABOH
list<int> lignes;
arbin gauche, droit; // stockage en liste
};
void insert(string,int,arbin);
void affichage(arbin);
arbin recherche(string,arbin);
void main()
{
char c;
string nomfichier; //lecture du texte sur disque
string mt;
int numligne = 1; // mise en mémoire ds type struct mot
arbin a=0, arb; // SD arborescente?
// en +: écrire un programme qui crée le fichier dique pr pouvoir tester par la suite
cout<<"entrez nom de fichier"<<endl;
cin>> nomfichier;
ifstream fi(nomfichier.c_str(),ios::in); //ouverture fichier disque
if(fi)
{
c=fi.get(); //lecture de caractère sur flot sans filtrage
while (fi)
{
if(strchr(" \n\r,.;:'",c)) //détection fin de mot
{
if(mt!=" ")
{
arb=recherche(mt,a); // pr chaque mot, on teste s'il est déjà ds l'arbre
if (arb==0) // si non, on crée un nveau noeud à l'arbre
{
insert(mt,numligne,a);
}
else arb->lignes.push_back(numligne); //si il y est on rajoute le numéro de ligne à la liste lignes du mot
mt=" ";
}
if(c=='\n') //saut de ligne
numligne++;
}
else mt=mt+c;
}
fi.close();
affichage(a);
}
else cout<<"erreue à l'ouverture du fichier"<<endl;
}
arbin recherche(string mt, arbin a) // recherche d'un mot dans l'arbre
{
if (a==0)
return 0;
if (a->mot==mt)
return a;
if ( a->mot< mt) // puisqu'on choisit d'utiliser un arbre ABOH,
return recherche(mt, a->droit); //les sous-programmes de recherche et d'insertion ont une forme simple
else return recherche(mt, a->gauche); //ils utilisent les propriétés des arbres ABOH
}
void insert(string mt, int l, arbin &a) //procédure d'insertion d'un mot ds l'arbre
{
if(a==0)
{
a=new motligne; //création d'un nveau noeud
a->mot=mt;
(a->lignes).push_back(l);
a->gauche=0;
a->droit=0;
}
else
{
if(mt < a->mot)
insert(mt,l,a->gauche); // insertion du mot ds le SAG
else insert(mt,l,a->droit); //insertion du mot ds le SAD
}
}
void affichage(arbin a)
{
list<int>::iterator it;
if(a!=0)
{
affichage(a->gauche);
cout<<setw(20)<<a->mot<<" ";
for(it=(a->lignes).begin();it!=(a->lignes).end();it++)
cout<<*it<<" ";
cout<<endl;
affichage(a->droit);
}
}