Les parametres par defaut en c++ ?

Résolu/Fermé
chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 - Modifié par chabacha109 le 11/12/2010 à 18:12
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 - 12 déc. 2010 à 00:13
Bonjour,
mon probléme avec les parametre par defaut en c++
lors de la déclaration d'une instance d'un objet( sans argument) le compilateur me dit :
"no appropriate default constructor available"
et Bien que j'ai implémenté ca ??







#include<iostream.h>
#include<string.h>

class poete
{

private:
char * titre;
char * theme;
int nbl;
bool signe;

public:


//les parametres par defaut pour pouvoir instancier sans argument
poete(char *="",char *="",int=0,bool=false);



poete(const poete &);
~poete();
char * gettitre();
char * gettheme();
int getnbl();
bool getsigne();
void settitre(char *);
void settheme(char *);
void setnbl(int);
void setsigne();
void affiche();

};
//ensuit l'implémentation de mes methodes
//poete::poete(char * ch1,char * ch2,int n,bool b){...}








void main()
{

poete p1("la charte","politique",5,true);

poete p2;//erreur

p2.affiche();
p1.affiche();

}

merci de votre aide :)

3 réponses

KX Messages postés 16736 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mai 2024 3 015
11 déc. 2010 à 18:59
Les paramètres par défauts se mettent à l'implémentation :

poete::poete(char* ch1="",char* ch2="", int n=0, bool b=false)
{
   // ...
}

De plus, il ne faut pas mélanger le C et le C++

Tu dois inclure <iostream> et non <iostream.h>
Et utilise plutôt la classe std::string, que les char* et "string.h"
0
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
12 déc. 2010 à 00:13
"Les paramètres par défauts se mettent à l'implémentation :"
non !!!
0
chabacha109 Messages postés 268 Date d'inscription samedi 11 décembre 2010 Statut Membre Dernière intervention 14 mai 2012 9
Modifié par chabacha109 le 11/12/2010 à 20:40
<gras>le même problème...
mon code marche parfaitement avec "<iostream.h>"
sauf une problème des paramétre par defaut.
alors voici mon prog:

ennoncé:
une poeme est définie par un titre (char *)
et un theme (char *)
un nbl (nombre de ligne)(int)
et une signature (booléen ,signé ou pas)



#include<iostream.h>

#include<string.h>

class poete
{

private:
char * titre;
char * theme;
int nbl;
bool signe;

public:
poete(char *,char *,int,bool);
poete(const poete &);
~poete();
char * gettitre();
char * gettheme();
int getnbl();
bool getsigne();
void settitre(char *);
void settheme(char *);
void setnbl(int);
void setsigne();
void affiche();
bool operator==(poete);

};

bool poete::operator ==(poete p)
{
if(strcmp(titre,p.titre)==0&&strcmp(theme,p.theme)==0&&nbl==p.nbl)
return true;
else
return false;
}

poete::poete(char * tit="",char * them="",int nb=0,bool b=false)
{
titre=new char [20];
theme=new char [20];

strcpy(titre,tit);
strcpy(theme,them);
nbl=nb;
signe=b;
}

poete::~poete()
{
delete [] titre;
delete [] theme;
}

poete::poete(const poete & p)
{
titre=new char [20];
theme=new char [20];
strcpy(titre,p.titre);
strcpy(theme,p.theme);
nbl=p.nbl;
signe=p.signe;
}

int poete::getnbl()
{
return nbl;
}

bool poete::getsigne()
{
return signe;
}

char * poete::gettheme()
{
return theme;
}

char * poete::gettitre()
{
return titre;
}


void poete::setnbl(int n)
{
nbl=n;
}

void poete::setsigne()
{
if(signe==true)
signe=false;
else
signe=true;
}

void poete::settitre(char * ch)
{
strcpy(titre,ch);
}


void poete::settheme(char * ch)
{
strcpy(theme,ch);
}



void poete::affiche()
{
if(signe==true)
{
cout<<"le titre est "<<titre<<endl;
cout<<"le theme est "<<theme<<endl;
cout<<"nbr ligne est "<<nbl<<endl;

}
else

cout<<"le poete n'est pas encore signee !"<<endl;
}









void main()
{
poete p1("la charte","politique",5,true);
poete p2;

}











</gras>
0
KX Messages postés 16736 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mai 2024 3 015
11 déc. 2010 à 20:48
Que ton code marche ou non avec <iostream.h>, ce n'est pas correct de l'écrire ainsi !

De plus, le point d'entrée du programme doit être int main et non void main.
Là encore ça peux marcher avec void, mais ce n'est pas correct.

Sinon, il manque juste le using namespace std, et c'est bon.

Remarque : il est plus judicieux d'utiliser les balises code, que les balises gras
0