IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Besoin d'aide pour pb de compilation


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 72
    Points : 70
    Points
    70
    Par défaut Besoin d'aide pour pb de compilation


    Je suis en train d'apprendre le C++. Après avoir téléchargé Visual C++ Express, je veux complier ce code:

    fichier ecole.cpp
    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
    #include <iostream>
    #include "classe.cpp"
     
     
    void main(void){
    	int choix=-1;
    	Classe c;
     
    	cout << "Bienvenue dans l'application ECOLE\n";
     
    	while (choix != 0){
    		cout << "MENU" << endl << "----" << endl;
    		cout << "1- Créer une classe\n";
    		cout << "2- Afficher une classe\n";
    		cout << "\n0- Quitter";
    		cout << "?";
     
    		cin >> choix;
     
    		switch (choix){
    			case '1':  c = new Classe();
    		} //Fin du switch
    	}//Fin du while

    fichier classe.cpp
    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
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    ref class Classe{
    private:
    	string nom;
     
    public:
    	Classe(){
    	nom = "Maternelle";
    }
    	void AfficherNom(){
    	cout << nom;
    	}
    };


    Je n'arrive pas à trouver la cause des erreurs. Pouvez vous m'aider svp ?

    D'avance merci.
    Bonne soirée

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Quelques remarques :

    - Utiliser la balise code prévue pour insérer le code.
    - On travaille l'indentation et la présentation du code, c'est plus facile pour les autres à lire.
    - Quand on dit qu'il y a des erreurs, on les donne afin de ne pas forcer les autres a recompiler le programme pour tenter d'avoir aussi les erreurs. D'autant plus que tu n'annonces pas ton environnement de développement.

    Citation Envoyé par lephotographe Voir le message
    #include "classe.cpp"
    Bien que ce que tu fasses ne soit pas strictement interdit, les bonnes pratiques en C++ disent que les classes sont déclarées dans un fichier .h (ou .hpp suivant) et définies dans le fichier .cpp (ou .cc suivant). Si cette bonne pratique est suivie, les seuls fichiers que l'on trouve dans un #include sont des fichier .h (ou .hpp suivant).

    Citation Envoyé par lephotographe Voir le message
    ref class Classe{
    Je ne comprend pas ce mot clé "ref" bien qu'il soit un mot clé C++. Si quelqu'un pouvait m'expliquer, je n'ai pas compris la documentation. En tout cas, chez moi, cela génère des erreurs et si j'enlève le mot clé ref, plus d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    test.cpp(10) : error C2143: erreur de syntaxe*: absence de ';' avant '<class-head>'
    test.cpp(10) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    Citation Envoyé par lephotographe Voir le message
    Classe c;
    case '1': c = new Classe();
    tu déclares dans ton code un objet "c" "plein" de type Classe
    et plus loin, tu fais c = new Classe(). Pour que le new soit accepté, il faudrait que c soit un pointeur sur Classe.

    Il manque une accolade fermante à la fin de ta fonction main(). Une indentation correcte t'aurais permis (et à moi aussi) de le voir immédiatement.

    Bonne continuation
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre régulier Avatar de cynique
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par lephotographe Voir le message


    (code coupé)

    Je n'arrive pas à trouver la cause des erreurs. Pouvez vous m'aider svp ?

    D'avance merci.
    Bonne soirée
    1. Je suis pédant. Le fonction "main" doit toujours être:

    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int main(int argc, char *argv[])
    Toutes autres formes provoquent la conduite indéfiniée.

    2. Comme a dit ram_000, on devrait #include <quelquechose.h> au lieu de #include <quelquechose.cpp>.

    3. Le "ref" n'est qu'à le C++.Net/CLI de Microsoft et ne marche pas avec gcc ou les compliateurs d'UNIX, Solaris, AIX, etc., mais aussi il ne marche pas avec Microsoft C++ sans .Net/CLI. Je crois qu'une classe "ref" soit comme une class de Java ou Python, avec les références automatiques.

    Tu peux utiliser:

    si tu ne veux pas utiliser le mot clé "ref", mais ça détruira la dernière objet de "Classe".

  4. #4
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 72
    Points : 70
    Points
    70
    Par défaut


    Tout d'abord, merci de m'avoir répondu.
    La version du compilateur que j'utilise est VC++ 9.

    J'ai remanié le code comme vous me l'avez suggéré, à savoir un fichier *.h et un fichier *.cpp. Quelques petites corrections et la compilation a été exécutée avec succès.

    2 questions:
    Je n'ai pas saisi la différence (ou plutôt dans quel cas on l'utilise) entre: MonObj.saMethode() et MonObj->saMethode().

    Cynique, qu'entends tu par "Toutes autres formes provoquent la conduite indéfiniée."

    D'avance merci
    Lephotographe

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par lephotographe Voir le message
    Je n'ai pas saisi la différence (ou plutôt dans quel cas on l'utilise) entre: MonObj.saMethode() et MonObj->saMethode().
    MonObj.saMethode() : cette formulation s'applique lorsque MonObjet est un objet "plein" (le mot "plein" n'est peut être pas correct mais j'ai pas mieux, je suis preneur du mot adéquat si quelqu'un le connait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Objet MonObjet;
       MonObj.saMethode();
    MonObj->saMethode() : cette formulation s'applique lorsque MonObjet est un pointeur sur objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Objet *MonObjet = new Objet;
       MonObj->saMethode();
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Points : 609
    Points
    609
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		switch (choix){
    			case '1':  c = new Classe();
    		}
    N'oublie pas le "break" à la fin d'un case (au risque, lorsque tu aura plusieurs cas, d'effectuer les operations suivantes)

    en outre, au lieu de faire un case '1', tu devrais faire un case 1

    Je m'explique: '1' sera traité comme le caractere 1 (soit l'entier numéro 49!) , or, en faisant un cin >> x avec x comme un int, il va te renvoyer dans x le numero lu dans la chaine (donc 1, qui est different de 49).

    Donc soit tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int choix = -1;
    (...)
    cin >> choix;
     
    switch(choix) {
     case 1:
    }
    Soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char choix = -1;
     
    cin >> choix;
     
    switch(choix) {
      case '1':
    }
    Dans le second cas parcontre tu ne pourra faire un case que de '0' jusqu'à '9'!

Discussions similaires

  1. Besoin d'aide pour compiler mon projet en VB6
    Par dmoluc dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/11/2012, 17h03
  2. Besoin d'aide pour compiler
    Par apprentinovice dans le forum Débuter
    Réponses: 5
    Dernier message: 20/02/2009, 12h03
  3. Besoin d'aide pour compiler des sources
    Par Fabouney dans le forum C
    Réponses: 9
    Dernier message: 26/07/2006, 00h02
  4. Besoin d'aide pour contourner une internal compiler error
    Par Laurent Gomila dans le forum C++
    Réponses: 18
    Dernier message: 27/06/2006, 22h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo