Les parametres par defaut en c++ ?

Résolu
chabacha109 Messages postés 268 Date d'inscription   Statut Membre Dernière intervention   -  
ydurce Messages postés 78 Date d'inscription   Statut Membre Dernière intervention   -
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 :)
A voir également:

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   18
 
"Les paramètres par défauts se mettent à l'implémentation :"
non !!!
0
chabacha109 Messages postés 268 Date d'inscription   Statut Membre Dernière intervention   9
 
<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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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