Classe et pointeur

Signaler
Messages postés
75
Date d'inscription
mardi 5 mars 2002
Statut
Membre
Dernière intervention
5 octobre 2005
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
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

Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
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 ??
Messages postés
75
Date d'inscription
mardi 5 mars 2002
Statut
Membre
Dernière intervention
5 octobre 2005

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
Messages postés
75
Date d'inscription
mardi 5 mars 2002
Statut
Membre
Dernière intervention
5 octobre 2005

new retourne un pointeur c bon j'ai compris il faut faire :

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

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