Math3o
Messages postés14Date d'inscriptionmardi 20 décembre 2005StatutMembreDernière intervention18 octobre 2007
-
20 déc. 2005 à 16:34
Math3o
Messages postés14Date d'inscriptionmardi 20 décembre 2005StatutMembreDernière intervention18 octobre 2007
-
20 déc. 2005 à 17:30
Salut à tous !
Voilà j'vous écris car j'ai un petit problème avec un projet que je dois réaliser pour les cours de programmation où l'on doit gérer un système de liste ( une sort de liste en deux dimensions). On a une liste ( class ensElem ) qui contient un pointeur vers un ensemble d'entier ( class element ) et un pointeur vers l'ensemble d'élément suivant. voici donc ma fonction qui sert a ajouter un nouvel ensemble d'entier en limitant l'utilisation de la mémoire ( en trouvant des suffix communs dans 2 ensemble d'entier différents ) :
class element;
typedef element* ensemble;
class element{
public :
int info;
int refcount;
element* next;
};
class ensElem;
typedef ensElem* ensEns; // Ensemble d' ensemble
class ensElem{
public :
ensemble head;
ensElem* next;
};
ensElem::ensElem ( ensemble e , ensEns ee )
{
head = e;
ensEns = ee;
}
include
using namespace std;
const int NULL = 0;
/////////////////////////////////////////////////////////////////////////////////////
/// Fonction n°1
/////////////////////////////////////////////////////////////////////////////////////
void ajout ( ensEns & ee, ensemble e )
{
ensemble pe, test, p1save, p2save;
int Long, LongSave = 0;
for ( ensEns p1 = ee ; p1 !=NULL ; p1 = p1->next )
{
test = p1->head;
pe = e;
Long = 0;
while ( test != NULL && e != NULL )
{
if ( pe->info == test->info )
{
pe = pe->next;
test = test->next;
if ( Long == 0 )
p1save = test;
Long++;
}
else
{
Long = 0;
if ( pe->info > test->info )
test = test->next;
else
pe = pe->next;
}
}
if ( Long > LongSave )
{
LongSave = Long;
p2save = p1save;
}
}
if ( LongSave != 0 )
{
if ( e->info == p2save->info )
{
e = p2save;
p2save->refcount++;
}
else
{
while ( e->next->info =! p2save->info )
e = e->next;
e->next = p2save;
p2save->refcount++;
}
}
while ( ee->next != NULL )
ee = ee->next;
ee->next = new ensElem ( e , NULL );
}
A la ligne marquée de rouge , le compilateur me dis :
`ensElem::ensElem(element*, ensElem*)' does not match any in class `ensElem'
je ne comprend pas ...
et a la ligne marquée de vert , le compilateur me dis également une chose que je ne comprend pas :
Pourriez vous m'aider svplé :) car j'ai beau chercher je ne trouve pas !
ps : si vous voyez une erreur dans ma fonction en ce qui concerne le résultat , ce n'est pas grave. je veux juste comprendre ce ke me dis le compilateur :) merci !
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 20 déc. 2005 à 17:12
ensEns n'est pas un pointeur, c'est un nom de type, équivalent à ensElem*. C'est donc exactement comme si tu écrivais ensElem* = ee; ce qui n'a aucun sens, tu es d'accord.
Tu dois donc remplacer cette ligne par next = ee;
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 20 déc. 2005 à 16:53
Rouge: tu as oublié de déclarer le constructeur dans ta classe, tu dois ajouter
ensElem ( ensemble e , ensEns ee );
Vert: corrige déja la rouge et on verra