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
Autre question : comment vous faites pour faire une capturer de votre code ainsi ??
Au temps pour moi, je n'avait pas vu la ligne public:
Ceci dit, mes remarques concernant le recours à des fonctions "init" et la const-correctness restent tout à fait valables
J'aurais tendance à dire que ton prof fait plus du "C with classes" que du C++
Si j'étais méchant, je pourrais facilement dire que ton prof aurait besoin d'une sérieuse remise à plat de ses connaissances en C++ (même s'il est peut etre très compétant en C au demeurant )
Ce qui est vrai aussi, c'est que l'on a l'habitude (mais bon, ce n'est qu'une haibtude, hein ) de voir l'interface publique en haut de la définition de la classe, et, souvent, de laisser un espace vide entre ce qui précède les informations de visibilité ( public:, protected:, private: et ce genre d'information...
Cela ne mange pas de pain de laisser une ligne vide, mais cela permet d'éviter les cas comme celui auquel on est confronté : une lecture un peu trop rapide a fait que je n'ai, en toute bonne foi, simplement pas vu que le mot clé public: était bel et bien présent
Il est bon de garder en mémoire qu'un code source sera beaucoup plus souvent lu ou étudié qu'il ne sera compilé
Avant même de penser à faire un code correct, il est donc important à faire en sorte que le code reste lisible aisément par l'humain, cela évite énormément de méprises
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
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager