J'ai un bout de code qui veut pas compiler et je comprends pas pourquoi.
Apparement il veut pas que j'utilise de constructeur avec arguments pour initialiser une donnée membre d'une classe
cf le code suivant qui plante a la ligne "A a(4);"
class A
{
public:
A(int c) { _c = c;};
private:
int _c;
};
class B
{
public:
B() {};
private:
A a(4);
};
void main(int argc, char ** argv)
{
B b;
}
Publicité
Posté le 15-03-2002 à 20:34:24
deathsharp
Posté le 15-03-2002 à 20:45:39
Code :
class A
{
public:
A(int c) { _c = c;};
private:
int _c;
};
class B
{
public:
B() : a( 4 )
{};
private:
A a;
};
void main(int argc, char ** argv)
{
B b;
}
---------------
What butter and whiskey won't cure, there is no cure for.
Profil supprimé
Posté le 15-03-2002 à 20:54:02
putain !!
j'avais pas pensé a ca !
bravo deathsharp, je vois qu'il n'y a pas que des blaireaux sur HFR
ceci dit j'aimerais comprendre du point de vue du fonctionnement du compilo pourquoi mon code n'est pas bon.
tu peux m'expliquer ca stp ? ca m'interesse vraiment beaucoup
verdoux
And I'm still waiting
Posté le 15-03-2002 à 21:00:57
Il a pas compilé parce que ce que tu avais écrit n'était pas du c++.
Profil supprimé
Posté le 15-03-2002 à 21:04:30
vachement constructif la reponse !! je sais bien que c'est pas du C++, sinon ca compilerait
pour que ca ne soit pas du C++, c'est qu'il y a une raison! cette raison fait que le compilo ne PEUT pas compiler ce code.
quelle est cette raison ?
à moins que ca ne soit qu'une convention syntaxique
deathsharp stp !!!
deathsharp
Posté le 15-03-2002 à 21:06:14
ca s'appelle la norme c++ on a pas le droit de faire. jamais de declaration de variable dans la decl de la classe. tu dois forcement le faire a l'aide de constructeur.
en esperant avoir repondu a la question
---------------
What butter and whiskey won't cure, there is no cure for.
Profil supprimé
Posté le 15-03-2002 à 21:13:08
je vais expliquer un peu mieux ce que je veux dire
par exemple : la norme C++ dit que dans le corps d'une fonction statique membre d'une classe, on ne peut appeler dans la meme classe que des fonctions elles aussi statiques.
pourquoi ? parce que dans une fonction statique on perd le pointeur this, donc on ne peut plus appeler de methodes non statiques (qui ont besoin d'un this)
c'est dans la norme C++ et il y a une raison claire qui explique pourquoi c'est dans la norme.
ma question : est ce que pour mon probleme il y a une raison claire qui fait que ca ne PEUT pas marcher ou alors ca pourrait tres bien marcher mais Strustroup a décidé que c'est pas du beau code donc c'est interdit ?
verdoux
And I'm still waiting
Posté le 15-03-2002 à 21:20:17
Le seul type de membre que tu peux définir dans un corps de classe est un membre statique, const, de type entier (
Code :
staticconstint toto = 1;
)
C'est la norme, ça s'explique pas, c'est comme ça.
deathsharp
Posté le 15-03-2002 à 21:48:26
Oualb a écrit a écrit :
je vais expliquer un peu mieux ce que je veux dire
par exemple : la norme C++ dit que dans le corps d'une fonction statique membre d'une classe, on ne peut appeler dans la meme classe que des fonctions elles aussi statiques.
pourquoi ? parce que dans une fonction statique on perd le pointeur this, donc on ne peut plus appeler de methodes non statiques (qui ont besoin d'un this)
c'est dans la norme C++ et il y a une raison claire qui explique pourquoi c'est dans la norme.
ma question : est ce que pour mon probleme il y a une raison claire qui fait que ca ne PEUT pas marcher ou alors ca pourrait tres bien marcher mais Strustroup a décidé que c'est pas du beau code donc c'est interdit ?
dans une fonction static tu na pas de this du tout
normal que tu peux pas appeler les autres fonctions.
et une raison claire... ben c comme ca.
faut bien que qq aie definie ca un jour nan?
c comme quand tu apprends l'anglais, ya bien des trucs que tu dois pas faire et d'autre que tu dois faire (les accord...)
si ca va pas avec ca ben... fait du yoga ca t'aidera ptetre
---------------
What butter and whiskey won't cure, there is no cure for.