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

goddez 2 Messages postés dimanche 30 avril 2006Date d'inscription 17 mai 2009 Dernière intervention - 17 mai 2009 à 19:35 - Dernière réponse : goddez 2 Messages postés dimanche 30 avril 2006Date d'inscription 17 mai 2009 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscription 6 octobre 2018 Dernière intervention - 17 mai 2009 à 20:51
3
Merci
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).

Merci cptpingu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cptpingu
goddez 2 Messages postés dimanche 30 avril 2006Date d'inscription 17 mai 2009 Dernière intervention - 17 mai 2009 à 23:40
0
Merci
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++.
Commenter la réponse de goddez

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.