Débutant : Inclusion de header dans main.cpp + problème de déclaration de classe

Résolu
goddez Messages postés 2 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 17 mai 2009 - 17 mai 2009 à 19:35
goddez Messages postés 2 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 17 mai 2009 - 17 mai 2009 à 23:40
Bonjour à tous :),
Je rencontre un problème plutôt spéciale depuis 2 jours et je n'arrive pas à mettre le doigt sur ce qui n'est pas correct. Je déclare une classe dans un .h comme d'habitude, je défini certaines partie de la classe dans un .cpp et j'inclu le .h dans main.cpp. Jusque là tout devrait bien aller. J'écris un programme pour un exercice d'un cour. voici l'explication de l'exercice plus le code que j'ai écris. Note: J'ai fais une recherche sur un problème semble mais je n'ai rien trouvé qui se rapproche du miens.

/*

Exercice 2 (5 points)
Une compagnie d'autobus vient d'acheter un ordinateur pour son
nouveau système de réservations informatisé. Cette compagnie
possède 2 autobus; ces autobus transportent 2000 passagers par
année vers New York. Le voyage aller et retour est de 3 jours.

Écrivez un programme qui attribue des sièges aux passagers lors
d'un voyage, en tenant compte que chaque autobus transporte soit
des fumeurs, soit des non-fumeurs.

Le programme doit afficher le menu suivant :

    * Appuyez sur 1 pour non-fumeurs
    * Appuyez sur 2 pour fumeurs

Si la réponse est 1, le programme attribue un siège dans un autobus
de non-fumeurs (1 à 40). Dans le cas contraire, il attribue un siège
dans un autobus de fumeurs (1 à 40). De plus, le programme devrait
afficher à l’écran un document de voyage qui indique si le passager
est dans un autobus de fumeurs ou de non-fumeurs et combien de
passagers il y a dans l'autobus.

*/

/*********************
main.cpp
*********************/

#include "travelcManager.h"

void main(){

 return 0;
}

/***************************
travelcManager.h
****************************/

#ifndef TRAVELCMANAGER_H
#define TRAVELCMANAGER_H

class TravelManager {

public:
        TravelManager(int );
        ~TravelManager();

        //Set
        void setPgrData(char *, bool, char *); //Ajout du nom du passager
        //et s'il est fumeur, création de la destination.
        //(string name, bool smoker, string destination)

        //Get
        void displayPgrData();
        void displayTravelData();

private:
        char *pgrName;
        int test;
}
#endif

/**********************

travelcManager.cpp

**********************/

#include "travelcManager.h"

TravelManager::TravelManager(int num){

        test  = num;
        pgrName = new char[12];

}

TravelManager::~TravelManager(){

    if(pgrName){
                pgrName = "";
    }
}

void TravelManager::setPgrData(char *name, bool smoker, char *destination){

}


L'erreur que j'obtient avec visual C++ express 2008 est :
1>------ Build started: Project: test1, Configuration: Debug Win32 ------

1>Compiling...

1>main.cpp

1>c:\users\portced\documents\docs\cpp\travail_trois\test1\test1\main.cpp(7) [à la ligne -> void main(){] : error C2628: 'TravelManager' followed by 'void' is illegal (did you forget a ';'?)

1>c:\users\portced\documents\docs\cpp\travail_trois\test1\test1\main.cpp(7)[à la ligne -> void main(){] : error C3874: return type of 'main' should be 'int' instead of 'TravelManager'

1>Build log was saved at "file://c:\Users\PortCed\Documents\Docs\Cpp\travail_trois\test1\test1\Debug\BuildLog.htm"

1>test1 - 2 error(s), 0 warning(s)

Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped


L'erreur que j'obtient avec Bordland C++ Builder 6.0(oui c'est vieux mais c'est ce que je dois utiliser pour les exercices) est:

  [C++ Warning] main.cpp(8): W8058 Cannot create pre-compiled header: header incomplete

  [C++ Error] main.cpp(8)[à la ligne -> void main(){]: E2176 Too many types in declaration

  [C++ Error] main.cpp(8)[à la ligne -> void main(){]: E2111 Type 'TravelManager' may not be defined here


Avec l'erreur de visual studio, j'ai un indice me disant que la
déclaration de la classe ou son inclusion ne se fait pas correctement,
mais je ne comprend vraiment pas ce qui pourrait causer ce problème.

Merci à l'avance pour votre aide.

2 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
17 mai 2009 à 20:51
A vue d'oeil:
- int main() et pas void main().
- Il faut un ";" après une accolade quand tu déclares une classe.

Quelques pratiques:
- On laisse le nom de arguments dans les signatures de la classe, ça permet de documenter le code (surtout si tu fais du doxygen après).

Remarques facultatives:
- .h/.cpp => préfère .hh/.cc ou .hpp/.cpp (Mais ça reste une bonne
pratique peu connue, que je ne me permettrais pas d'imposer).
- Les accolades alignées verticalement sont plus lisibles (question de goût).
3
goddez Messages postés 2 Date d'inscription dimanche 30 avril 2006 Statut Membre Dernière intervention 17 mai 2009
17 mai 2009 à 23:40
Merci bcp pour ton aide. C'était vraiment ridicule de ma part cet oubli de ";".
Pour main je croyais que retour de donné ou pas de retour du tout n'y changeait rien. Merci pour le hint! :)
En ce qui concerne tes conseils de pratiques je vais garder ça en tête.
Pour tes remarques sur la terminaison d'un fichier, c'est une bonne idée je trouve, surtout pour différencier le c du c++.
0
Rejoignez-nous