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

Langage C++ Discussion :

Include et POO


Sujet :

Langage C++

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Include et POO
    Salut !

    Je debute dans le C++ en m' embrouillant avec les includes: j' ai un fichier main.h contenant toutes mes includes de base:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef MAIN_H
    #define MAIN_H
     
    #include <iostream>
    #include <string>
    #include <vector>
    #include <map>
    #include "SCREEN.h"
     
    using namespace std;
     
    #endif
    Mon fichier SCREEN.h est une simple declaration de base:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef SCREEN_H
    #define SCREEN_H
     
    #include "main.h"
     
    class SCREEN
    &#123;
    public&#58;
        void tes&#40;void&#41;;
    &#125;;
    #endif //SCREEN_H
    Et mon fichier SCREEN.cpp contient les toutes simples declaration de cette classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "SCREEN.h"
     
    void SCREEN&#58;&#58;tes&#40;void&#41;
    &#123;
        cout << "tes" << endl;
    &#125;
    Mon fichier main.cpp contient simplement l' include de main.h et la fonction main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "main.h"
     
    int main&#40;&#41;
    &#123;
        SCREEN test;
        return 0;
    &#125;
    Voila tout. J' essaye de compiler le tout avec Borland C++ Builder X (avec GCC comme compilateur) et j' obtiens comme erreur que tes est defini plusieurs fois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SCREEN.cpp" &#58; src/SCREEN.cpp définitions multiples de « SCREEN&#58;&#58;tes&#40;&#41;    » en ligne 4
    Pourtant, si je compile exactement le même code en ligne de commande avec G++, je n' obtiens aucune erreur !

    Merci

  2. #2
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    C'est peut-être une erreur de ma part mais... où est ton constructeur pour
    ?
    Ton code marche sans problème quand tu l'exécute(la compilation qui réussit n'est pas forcément synonyme de bon fonctionnement du prog)?

  3. #3
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Citation Envoyé par reggae
    C'est peut-être une erreur de ma part mais... où est ton constructeur pour
    Le constructeur n'est pas obligatoire, tout comme le destructeur.

    Sinon c'est vraiment bizare, je ne voit pas la moindre chose qui puisse poser une éreur...

    Edit : J'ai compiler le code sous dev c++ en rajoutent dans la fonction main test.tes(); et le programme fonctione a la perfection!!!
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  4. #4
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Alors là va faloir que je révise mes cours...
    Si il n'y a pas de constructeur(je savais que le destructeur n'est pas obligatoire) l'objet est créé sans aucune autre action je suppose?
    A priori tu as raison rien ne semple gêner la compil'...

  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 : 39
    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
    Si il n'y a pas de constructeur(je savais que le destructeur n'est pas obligatoire) l'objet est créé sans aucune autre action je suppose?
    Pas exactement. Le compilo génère un constructeur par défaut (s'il n'y en a aucun autre), qui initialisera à son tour toutes les données membres via leur constructeur par défaut. Pas toujours trivial, donc.

    Sinon pour le problème initial, il me semble qu'il y a des inclusions croisées entre main.h et SCREEN.h. Vire l'inclusion de main.h dans SCREEN.h, c'est inutile et ça débloquera sans doute le schmilblick.

  6. #6
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Oui mais sa ne marcheras plus, sa ne compileras plus car il n'y auras plus le #include <iostream> contenu dans .h, ni les autres inclusions.

    Donc, a ta place, je mêtrais a la place de #include "main.h" les inclusons des fichier qui sont nésésaire seulement pour SCREEN.cpp
    Ensuite peut importe si main.h et SCREEN.h inclue les mêmes fichier, le plus important est qu'ils ne s'inclu pas entre eux,(comme la dit loulou24)
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  7. #7
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Salut,
    sinon pas trop de rapport mais évite les "using namespace std;" dans les .h
    (ici main.h je crois).
    préfixe tout par std:: dans les .h (ce qui est nécessaire évidement)
    et fait le using dans le .cpp uniquement.
    Ca évite d'ouvrir le namespace std pour tous ceux qui incluront ton .h
    (même si ici c'est pas évident qu'il y en ait)

Discussions similaires

  1. [POO] parse error introuvable include/require
    Par highman dans le forum Langage
    Réponses: 5
    Dernier message: 22/10/2006, 15h31
  2. [POO] template ou include ?
    Par rougedragon dans le forum Langage
    Réponses: 1
    Dernier message: 15/10/2006, 15h05
  3. [POO] [Alias] Problème d'include avec classe
    Par scorpiwolf dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2006, 20h55
  4. lier un cube à un objet (POO)
    Par Hypnos dans le forum OpenGL
    Réponses: 12
    Dernier message: 26/08/2003, 21h46
  5. #include "math.h" et #include <math.h>
    Par pounka dans le forum C
    Réponses: 4
    Dernier message: 01/05/2003, 21h06

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