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 :

[debutant]Compilation : too many types in declaration


Sujet :

C++

  1. #1
    Battosaiii
    Invité(e)
    Par défaut [debutant]Compilation : too many types in declaration
    Bonjour
    Lorsque je compile j'obtiens ces erreurs que je ne comprends pas :

    Error E2176 main.cpp 3: Too many types in declaration
    Error E2111 main.cpp 4: Type 'plane' may not be defined here
    Voici le main.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include"FlyingMachine.h"
    #include"plane.h"
    void main()
    {
      FlyingMachine f= FlyingMachine();
      f.TurnOnEngine();
      f.TakeOff();  //
      f.land();	
     
      plane p= plane();
      p.land();
    }
    d ou peut venir l'erreur ?

  2. #2
    mat.M
    Invité(e)
    Par défaut
    En ayant le code source des fichiers d'inclusion (.h) ce serait mieux merci

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Au pif, un point-virgule oublié après la définition de la classe plane ?

    A part ça, avec cette écriture

    Tu as à chaque fois un temporaire et une copie inutile. Contente toi de "Truc x;".

  4. #4
    Battosaiii
    Invité(e)
    Par défaut
    ok j'ai ceci dans Flyingmachine.h

    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
     
    #include<iostream>
    #include<string>
    //using namespace std; 
    class FlyingMachine
    {
     
     
        bool Engine;
    	bool OnAir;
     
      public:
    	FlyingMachine(); 
    	//virtual void fly();
         void land();
         void TakeOff();
    	 void TurnOnEngine(); 
    };
    et ca dans plane.h

    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
     
     
    #include<iostream>
    #include<string>
    //#include"FlyingMachine.h"
     
    class plane : public FlyingMachine
    {
    	bool landingGearOn; // is the landing gear retracted or not ?
     
    public :
    	 plane();	 
    	 void land();
         void TakeOff();
    	 void landingGear();
    }

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par Loulou24
    Au pif, un point-virgule oublié après la définition de la classe plane ?
    Citation Envoyé par Battosaiii
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class plane : public FlyingMachine
    {
        ...
    } <-----------------------------------

  6. #6
    Battosaiii
    Invité(e)
    Par défaut
    merci ca marche :

    ensuite il me dit :

    Error E2303 plane.h 6: Type name expected
    Error E2451 plane.cpp 15: Undefined symbol 'OnAir' in function plane::land()
    Error E2451 plane.cpp 15: Undefined symbol 'Engine' in function plane::land()
    pourtant il y a pas d'erreur :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    class plane : public FlyingMachine
    {
    	bool landingGearOn; // is the landing gear retracted or not ?
     
    public :
    	 plane();	 
    	 void land();
         void TakeOff();
    	 void landingGear();
    };
    Sinon une question d'order general jai creer une sous classe d'une classe de reference. Je redefinit certaines fonction dans la sous classe. En la redefinissant j'utilise des variables definit uniquementy dans la classe de reference mais il m'envoie une erreur du type :
    Error E2451 plane.cpp 15: Undefined symbol 'OnAir' in function
    Faut il que je redefinisse ces variables dans la sous classe ? Comment appeller les var de la classe de ref ?

    jespere aue quelqun a compris . je me suis pas relu je dors presque lka ...pardon..

  7. #7
    Battosaiii
    Invité(e)
    Par défaut
    j'ai cette erreur :

    Error E2303 plane.h 6: Type name expected
    avec le code suivant :
    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
     
    #include<iostream>
    #include<string>
    //#include"FlyingMachine.h"
     
    class plane : public FlyingMachine
    { // ICI EST LA LIGNE 6
    	bool landingGearOn; // is the landing gear retracted or not ?
     
    public :
    	 plane();	 
    	 void land();
         void TakeOff();
    	 void landingGear();
    };
    d'ou provient l'erreur ?

  8. #8
    sas
    sas est déconnecté
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 1 257
    Points
    1 257
    Par défaut
    vire les commantaires devant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    //#include"FlyingMachine.h"
    et utilise des macros dans tes fichiers de déclarations.

  9. #9
    Battosaiii
    Invité(e)
    Par défaut
    J'ai encore plus d'erreur apres :

    Error E2238 FlyingMachine.h 5: Multiple declaration for 'FlyingMachine'
    Error E2344 FlyingMachine.h 4: Earlier declaration of 'FlyingMachine'
    *** 2 errors in Compile ***
    FlyingMachine.cpp:
    plane.cpp:
    Error E2247 plane.cpp 15: 'FlyingMachine::Engine' is not accessible in function
    plane::land()
    sachant que flyingmachine.h est :

    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
     
    #include<iostream>
    #include<string>
    //using namespace std; 
    class FlyingMachine
    {
     
     
        bool Engine;
    	bool OnAir;
     
      public:
    	FlyingMachine(); 
    	//virtual void fly();
         void land();
         void TakeOff();
    	 void TurnOnEngine(); 
    };
    Je comprends pas pkoi il me dit multiple declaration ?

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    il te dit cette erreur en compilant quel fichier?
    visiblement, ce n'est ni FlyingMachine.cpp ni plane.cpp puisqu'ils sont compilés après...

  11. #11
    Battosaiii
    Invité(e)
    Par défaut
    en compilant main.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include"FlyingMachine.h"
    #include"plane.h"
    void main()
    {
      FlyingMachine f= FlyingMachine();
      f.TurnOnEngine();
      f.TakeOff();  //
      f.land();	
     
      plane p= plane();
      p.land();
    }

  12. #12
    sas
    sas est déconnecté
    Membre éprouvé

    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 1 257
    Points
    1 257
    Par défaut
    c'est que t'as pas mis des macros dans tes fichiers de déclarations

    "fichier.h"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef MON_FICHIER_INCLUDE
    #define MON_FICHIER_INCLUDE
     
    // ... déclarations de ta (ou tes classes) ou autes...
     
    #endif

  13. #13
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Dans ce cas, tu as plusieurs choix:

    1) supprimer le #include "FlyingMachine.h" dans plane.h et l'inclure manuellemement dans tout fichier source qui inclut plane.h (l'inclure avant plane.h, évidemment)

    2) mettre des gardes d'inclusion multiple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // FlyingMachine.h
    #ifndef FLYINGMACHINE_H_INCLUS
    #define FLYINGMACHINE_H_INCLUS
     
    class FlyingMachine
    {
    // (contenu de la classe)
    }:
     
    #endif // ! FLYINGMACHINE_H_INCLUS

  14. #14
    Battosaiii
    Invité(e)
    Par défaut
    g mis les ifndef mais j'ai un probleme avec :

    plane.cpp:
    Error E2247 plane.cpp 13: 'FlyingMachine::Engine' is not accessible in function
    plane::land()
    Error E2247 plane.cpp 13: 'FlyingMachine::Engine' is not accessible in function
    plane::land()

    sachant que le code c'est :
    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
     
     
    #include"plane.h"
     
     
    plane::plane()
    {
    landingGearOn=true;
    }
     
     
    void plane::land()
    {
        if(OnAir && Engine ) \\ ICI C LIGNE 13
    	{
    [/quote]

  15. #15
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Dans la déclaration de FlyingMachine, rien ne te garanti que ces deux attributs sont public ou protected.

    S'ils sont considérés comme private, il ne sont pas accessibles à la classe dérivée Plane.

    Et au passage, les ifdef ont résolu tes erreurs précédentes, laissant le compilateur en trouver d'autres.

    Ce n'est pas les ifdef qui induisent cette nouvelle erreur. C'est plutôt un problème de compréhension de la visibilité entre private, protected et public.

  16. #16
    Battosaiii
    Invité(e)
    Par défaut
    ok ca marche j'arrete de vous casser les couilles les gars ! Merci a tous,
    vi t'as raison caine j'ai mis protected ...

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/09/2014, 09h36
  2. Réponses: 2
    Dernier message: 21/03/2011, 14h43
  3. [servlet][debutant] compilation impossible
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/03/2004, 11h48
  4. [DDL] Too many versions
    Par TMuet dans le forum Débuter
    Réponses: 4
    Dernier message: 13/01/2004, 09h23
  5. Pgsql : erreur de connexion 'too many clients ...'
    Par petitmoosse dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 21/08/2003, 14h03

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