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 -
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 :)
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:
- Les parametres par defaut en c++ ?
- Parametres de mon ordinateur - Guide
- Paramètres dns - Guide
- Restaurer les paramètres par défaut ps4 - Guide
- Ouvrir avec par défaut - Guide
- Google page d'accueil par défaut - Guide
3 réponses
Les paramètres par défauts se mettent à l'implémentation :
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"
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"
<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>
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>
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
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
non !!!