C++
Fermé
antipopol
-
18 juil. 2006 à 19:20
mamiemando Messages postés 33432 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 - 19 juil. 2006 à 09:53
mamiemando Messages postés 33432 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 - 19 juil. 2006 à 09:53
3 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
18 juil. 2006 à 19:46
18 juil. 2006 à 19:46
Bonjour,
Avant celà, dis nous quand même quel est le problème. Problème à l'execution? Problème à la compilation? Qu'est ce qui est affiché?
Avant celà, dis nous quand même quel est le problème. Problème à l'execution? Problème à la compilation? Qu'est ce qui est affiché?
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 juil. 2006 à 08:22
19 juil. 2006 à 08:22
ce qui ne va pas :
aucune allocation mémoire, et plein de pointeurs.
Et ta class liste devrai plutot portée le nom d'étudiant
aucune allocation mémoire, et plein de pointeurs.
Et ta class liste devrai plutot portée le nom d'étudiant
mamiemando
Messages postés
33432
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
16 décembre 2024
7 809
19 juil. 2006 à 09:53
19 juil. 2006 à 09:53
Attention la liste peut paraître longue mais il ne faut surtout pas prendre ça comme un reproche ;-)
1) Cette syntaxe est obsolète :
A remplacer par :
Idéalement il faudrait ne pas utiliser la ligne using namespace std et changer tous les cout par des std::cout.
2) D'une manière générale en c++ on n'utilise pas de majuscule contrairement au jave mais c'est plus une convention qu'une règle. Sauf cas particulier on peut se passer en général des pointeurs en C++ notamment en utilisant les passages par référence (&). Syntaxiquement tout se passe comme si tu passais directement l'objet en paramètre, mais en terme d'éxécution et de compilation tout se passe comme s'il s'agissait du pointeur.
3) La classe Liste ne fournit aucun accesseur pour récupérer ou initialiser le nom. Il faudrait au moins un constructeur permettant de les initialiser.
4) La notion de suivant ne devrait pas être contenue dans l'objet Liste :
a) cet objet Liste devrait uniquemennt décrire un étudiant
b) il faut créer un objet liste encapsulant la liste d'élève. Note que le c++ fournit un certain nombre de conteneur pour stocker des objets quelconque (STL)
Pour plus d'infos ;
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
Idéalement j'utiliserai même un C en utilisant pour clé le nom et le prénom afin d'avoir un ensemble d'éleve trié et être sûr qu'on n'a pas de doublon. De plus la recherche se fera de manière plus efficace (O(log(n)) au lieu de O(n)). Pour plus d'infos ;
http://c.developpez.com/faq/cpp/?page=STL#STL_functor
5) Le C++ fournit une classe (std::string) beaucoup plus pratique que le basique char *.
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
6) Je n'ai pas vu où tu utilisais les headers <conio.h> et <ctypes.h> mais vu que ce sont des headers C tu aurais du écrire :
Enfin pour être standard, main est sensé retourner un entier indiquant le code d'éxecution (0 si tout va bien e tun numéro d'erreur sinon).
Bonne chance
1) Cette syntaxe est obsolète :
#include <iostream.h>
A remplacer par :
#include <iostream> using namespace std; // permet d'éviter d'écrire cout à la place de std::cout
Idéalement il faudrait ne pas utiliser la ligne using namespace std et changer tous les cout par des std::cout.
2) D'une manière générale en c++ on n'utilise pas de majuscule contrairement au jave mais c'est plus une convention qu'une règle. Sauf cas particulier on peut se passer en général des pointeurs en C++ notamment en utilisant les passages par référence (&). Syntaxiquement tout se passe comme si tu passais directement l'objet en paramètre, mais en terme d'éxécution et de compilation tout se passe comme s'il s'agissait du pointeur.
void plop(int i){ ++i; //i n'est pas incrementé à l'exterieur de la fonction } void plop(int & i){ ++i; //i est incrementé }
3) La classe Liste ne fournit aucun accesseur pour récupérer ou initialiser le nom. Il faudrait au moins un constructeur permettant de les initialiser.
Liste(const char *nom0,const char *prenom0,int note0): nom(nom0),prenom(prenom0),note(note0),suivant(NULL) {} inline void set_nom(const char *nom0){ nom = nom0;} inline const char * get_nom() const { return nom;}
4) La notion de suivant ne devrait pas être contenue dans l'objet Liste :
a) cet objet Liste devrait uniquemennt décrire un étudiant
b) il faut créer un objet liste encapsulant la liste d'élève. Note que le c++ fournit un certain nombre de conteneur pour stocker des objets quelconque (STL)
#include <list> typedef std::list<eleve> liste_eleve;
Pour plus d'infos ;
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
Idéalement j'utiliserai même un C en utilisant pour clé le nom et le prénom afin d'avoir un ensemble d'éleve trié et être sûr qu'on n'a pas de doublon. De plus la recherche se fera de manière plus efficace (O(log(n)) au lieu de O(n)). Pour plus d'infos ;
http://c.developpez.com/faq/cpp/?page=STL#STL_functor
5) Le C++ fournit une classe (std::string) beaucoup plus pratique que le basique char *.
https://community.hpe.com/t5/custom/page/page-id/HPPSocialUserSignonPage?redirectreason=permissiondenied&referer=https%3A%2F%2Fcommunity.hpe.com%2Ft5%2FServers-Systems-The-Right%2FSGI-com-Tech-Archive-Resources-now-retired%2Fba-p%2F6992583
#include <string> class eleve{ private: std::string nom; std::string prenom; int note; //Liste *suivant; public: eleve(const std::string & nom0,const std::string & prenom0,int note): nom(nom0),prenom(prenom0)note(note0) {} ... };
6) Je n'ai pas vu où tu utilisais les headers <conio.h> et <ctypes.h> mais vu que ce sont des headers C tu aurais du écrire :
extern "C"{ #include <conio.h> #include <ctypes.h> }
Enfin pour être standard, main est sensé retourner un entier indiquant le code d'éxecution (0 si tout va bien e tun numéro d'erreur sinon).
int main(){ ... return 0; }
Bonne chance