Bonsoir
J'ai fais un code qui permet de calculer le perimetre d'un rectangle
Mais lors de la compilation ya une erreur "expected unqualified-id expected before ')' (ligne 5)
j'arrive pas à savoir où est le pb???
Bonsoir
J'ai fais un code qui permet de calculer le perimetre d'un rectangle
Mais lors de la compilation ya une erreur "expected unqualified-id expected before ')' (ligne 5)
j'arrive pas à savoir où est le pb???
Tu as mis des parenthèses au nom de la classe, ce n'est pas permis, seul les fonctions peuvent en avoir.
Tu as oublié un ; après la } de la définition de ta classe.
Salut,
Heuu, à vrai dire, je serais vraiment étonné que, tel quel, ton code fonctionne parce que, en dehors de toute précision contraire (ce qui est le cas tel que tu nous le présente), les membres et fonctions membres d'une classe ont une accessibilité par défaut à private, et ne sont donc accessibles qu'aux fonctions membres de la classe elle-même!!!
De plus, on préfère éviter le recours à des fonctions de type "init", parce que l'on préfère utiliser un mécanisme nommé "RAII" (Ressource Aquizition Is Initialization) en implémentant une fonciton particulière qui sera d'office appelée lorsque l'on crée une nouvelle instance de la classe et qui s'appelle le "constructeur".
Ainsi, ta classe Rectangle devrait plutôt ressembler à quelque chose comme
et son utilisation deviendrait alors proche de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 class Rectangle { public: // si on ne ne le précise pas, tout est dans la visibilité private, // et la classe devient inutilisable /* le constructeur, prend les deux valeurs qui nous intéressent à * savoir la longueur et la largeur */ Rectangle(float longueur, float largueur): long(longueur),larg(largeur) // ceci s'appelle une liste d'initialisation { } float perimetre() const /* précise que cette fonction s'engage à ne * pas modifier l'objet au départ duquel elle est appelée * Cela participe au respect de la "const-correctness" */ { return (long+larg)*2; } void affich() const /* idem */ { std::cout<<"longueur :"<<long<<std::endl <<"largeur : "<<larg<< std::endl <<"perimetre : "<<perimetr()<<std::endl; } private: float long; float larg; };
Le principe que l'on appelle "const-correctness" conseille, tout simplement, de préciser qu'une fonction qui ne modifie pas l'objet en cours (comme c'est le cas de perimetre() et de affiche(), mais comme ce n'était pas le cas de ta fonction init() )s'engage à... ne pas modifier l'objet en question.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main() { rectangle r(2,3); r.affich(); return 0; }
Cela a son importance pour la simple et bonne raison que l'on va parfois devoir travailler avec des objets "constants" (des objets dont on ne veut absolument pas qu'ils soient modifiés durant le traitement qu'ils subissent), et que, dans de telles conditions, seules les fonctions qui se seront engagées à ne pas modifier les objet pourront être appelées.
Dans de telles circonstances, tu pourras danser sur ta tête, le compilateur sera décidément beaucoup plus buté que toi, et refusera purement et simplement que tu tentes d'utiliser une fonction non constante depuis un objet constant
Finalement, le fait de déclarer constant tout ce qui n'a pas vocation à être modifié ou à modifier l'objet au départ duquel la fonction est appelée t'évitera bien des soucis suite à des modifications involontaires, appliquées par des fonctions qui seraient appelées par une fonction à laquelle tu aurais recours![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager