Les parametres par defaut en c++ ?

Résolu
chabacha109 Messages postés 326 Statut Membre -  
ydurce Messages postés 81 Statut Membre -
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 19031 Statut Modérateur 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 81 Statut Membre 18
 
"Les paramètres par défauts se mettent à l'implémentation :"
non !!!
0
chabacha109 Messages postés 326 Statut Membre 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 19031 Statut Modérateur 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