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 :

Debut en C++ erreur lors de la compilation


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Debut en C++ erreur lors de la compilation
    je commenc la programmation en C++ et voici l'erreur que je rencontre le plus souvent. Achaque fois que je compile cette erreur s'affiche j'arrive vraiment pas a comprendre.
    Merci de votre aide

    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
     
    #include <cstdlib>
     #include <iostream>
     
     using namespace std;
     struct Msg
     {
     char message[256];       
     void aff_message(void)
     {
     cout<< message;
     }
     }
     void main(void)
     {
         struct Msg livre= {"je suis un mauvais programmeur en c++"};
         livre.aff_message();
     
      }
    erreur généré

    14 C:\Users\chabeka\Desktop\ALIOU\bible\main.cpp new types may not be defined in a return type
    14 C:\Users\chabeka\Desktop\ALIOU\bible\main.cpp two or more data types in declaration of `main'
    14 C:\Users\chabeka\Desktop\ALIOU\bible\main.cpp `main' must return `int'
    C:\Users\chabeka\Desktop\ALIOU\bible\Makefile.win [Build Error] [main.o] Error 1

  2. #2
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    C'est pas void main (vieux compilos), mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main()
    {
      // Traitement
      return 0;
    }

  3. #3
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Et il manque le ; après la définition de la struct (un grand classique, celui-là)

    Aussi, en C++, tu n'as pas besoin de répéter struct, quand tu utilises Msg

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut
    Citation Envoyé par chabeka Voir le message
    struct Msg livre= {"je suis un mauvais programmeur en c++"};
    Je vais me permettre de rajouter: pour faire changer cela, commence par utiliser std::string plutôt qu'un tableau de char pour les chaînes de caractères

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    La premiere erreur (new types may not be defined in a return type)vient du fait qu'il manque le point virgule ";" après l'accolade fermante de la définition de la structure...
    Il suffit donc de rajouter ce point virgule après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     struct Msg
     {
     char message[256];       
     void aff_message(void)
     {
     cout<< message;
     }
     };
    La deuxième erreur ('main' must return 'int'), comme l'a fait remarquer Trunks vient du fait que la fonction main doit renvoyer ... un int

    Ceci dit, il reste quelques fautes dans ton code:

    En C++, le fait de définir une sturcture (une classe, une énumération ou une union) définit automatiquement le type approprié.

    Il n'est donc pas nécessaire de rappeler le mot clé struct lorsque tu souhaite déclarer une variable du type de ta structure

    Enfin, il faut savoir que "message" fait partie intégrante de ta structure, et donc que tu ne peut y accéder qu'au départ de la variable de type Msg.

    Et, comme tu n'a pas précisé de constructeur prenant une chaine de caractères en argument, tu ne peut pas initialiser directement le message de Msg en déclarant une variable de type Msg.

    Le code que tu as écrit ici (même en supprimant le struct inutile)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msg livre= {"je suis un mauvais programmeur en c++"};
    est donc faux, et, comme tu travailles encore avec une chaine de caractères "C style" tu dois travailler "à la manière C" pour initialiser correctement le message
    Au final, ton code devrait être modifié sous la forme 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
    30
    31
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
    /* il faut vraiment prendre rapidement l'habitude de suivre
     * une politique d'indentation stricte du code...
     * cela te facilitera énormément la relecture de ton code, 
     * et je peux t'assurer que tu passera énormément de temps
     * à le lire ;)
     */
    struct Msg
    {
     
         char message[256];       
         void aff_message(void)
         {
            cout<< message;
        }
    };
     
    int main(void)
    {
        /*déclarons une variable "livre" qui est de type Msg */
        Msg livre;
        /* initialisons le message à "je suis un mauvais programmeur" */
        strcpy("je suis un mauvais programmeur",livre.message);
        /* et faisons le afficher */
        livre.affiche();
        /* si tout s'est bien déroulé, main renvoie 0 */
        return 0;
    }
    Enfin, il faut savoir que la gestion de chaines de caractères à la manière "C style" (comme s'il s'agissait de tableau de caractères terminés par '\0') est très embêtante et de nature à apporter énormément de problèmes (risque de dépasser la taille que l'on a allouée pour la chaine, nécessité d'utiliser les fonctions str_* pour chaque modification, comparaison,...)

    Le C++ fournit une classe qui est prévue pour gérer les chaines de caractères, et qui en facilite énormément l'usage.

    Cette classe est la classe "string", disponible dans l'espace de noms std (comme tout ce qui est fourni par le standard) par inclusion du fichier d'en-tête <string>.

    Tu devrais t'habituer directement à utiliser cette classe à chaque fois, tout comme le meilleur conseil à te donner est (de manière générale) de toujours préférer une solution issue du C++ à une solution équivalente issue du C, parce qu'elle sera généralement beaucoup plus sécurisante à l'emploi
    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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/04/2015, 11h01
  2. Erreur lors de la compilation de MySQL
    Par webrider dans le forum SUSE
    Réponses: 2
    Dernier message: 06/03/2007, 11h21
  3. Erreur lors de la compilation avec OmniORB
    Par JohnKwada dans le forum CORBA
    Réponses: 1
    Dernier message: 07/09/2006, 17h34
  4. erreur lors de la compilation
    Par ksoft dans le forum MFC
    Réponses: 2
    Dernier message: 02/05/2006, 15h40
  5. Réponses: 4
    Dernier message: 22/02/2006, 14h11

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