Classe et pointeur

anduril22 Messages postés 75 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 octobre 2005 - 26 mai 2004 à 21:06
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 26 mai 2004 à 21:46
Salut j'ai un petit souci, (erreur de compilation) j'ai une classe qui se compose comme ceci :

Dans mon fichier test.h
***********************
typedef struct _maillon {
int nb;
struct _maillon * suivant;
} maillon;

// Définition de la classe
class CFILE {

public:
//Constructeur
cfile(maillon ** f);
};

Dans mon fichier test.cpp
*************************
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "test.h"

// Constructeur de la classe
CFILE::cfile(maillon **f) {
*f = NULL;
}

// Programme de test
void main () {
maillon * file;
CFILE mafile = new CFILE(&file);
}

et quand je compile j'obtient cette erreur
****************************************
test.cpp(50) : error C2664: '__thiscall CFILE::CFILE(const class CFILE &)' : cannot convert parameter 1 from 'struct _maillon ** ' to 'const class CFILE &'

Reason: cannot convert from 'struct _maillon ** ' to 'const class CFILE'

No constructor could take the source type, or constructor overload resolution was ambiguous

Avez vous une idée ? la je vois pas merci.

Anduril22

4 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 mai 2004 à 21:19
le message est clair, tu essay de faire une copie a partir d'un maillon, seul le constructeur par copie est generer par le compilo

aussi ton code n'est pas c++ et tu n'a pas redeifini de constructeur (il doit avoir le mem non que la classe, en respectant la casse!)

struct maillon {
int nb;
maillon * suivant;
};

struct CFILE {

CFILE();
CFILE(maillon ** f);
};

le CFILE(); c'est pas obligatoire mais a partir du moment ou tu redefini un constructeur, doit doit obligatoirement faire de meme avec le constructeur par defaut (sans parametres) sinon si tu fait new[] ==> boum
la c'est deja mieux, mais j'ai du mal a voir comment tu modelise ce probleme ??
0
anduril22 Messages postés 75 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 octobre 2005
26 mai 2004 à 21:32
Je veux créer un système de liste chainée sous forme de classe grosso modo.

En fait j'avais appelé mon contructeur cfile au lieu de CFILE d'où le problème. j'ai aussi modifié ma structure.

Mais j'obtient ce message d'erreur maintenant que je comprend tjs pas :

test.cpp(50) : error C2440: 'initializing' : cannot convert from 'class CFILE *' to 'class CFILE'

No constructor could take the source type, or constructor overload resolution was ambiguous

Merci
0
anduril22 Messages postés 75 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 octobre 2005
26 mai 2004 à 21:42
new retourne un pointeur c bon j'ai compris il faut faire :

CFILE * mafile = new CFILE(&file);
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
26 mai 2004 à 21:46
ouai, mais ca fuit si tu fait pas le delete associé

je te conseil std::vector, plus securisant que les pointeurs
0