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 :

Appeler une classe dans une autre


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Par défaut Appeler une classe dans une autre
    Bonjour, avant toute chose je tiens à vous dire que je suis débutant dans le langage du C++. Cette chose étant faite j'aimera avoir votre expertise sur les deux codes suivants, l'un compile très bien l'autre pas du tout et j'aimerai arriver à ce qu'il puisse compiler. Voici le code qui compile :

    Voici le fichier main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <iostream>
    #include "class1.hpp"
     
    int main(){
    Class1 class1;
    return EXIT_SUCCESS;
    }
    Le fichier class1.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    #include "class1.hpp"
     
    Class1 :: Class1(){
     
    class2;
     
     
    }
    Le fichier class1.hpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef DEF_CLASS1
    #define DEF_CLASS1
     
    #include "class2.hpp"
     
    class Class1{
     
    public:
    Class1();
    Class2 class2;
    };
     
    #endif
    Le fichier class2.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
    #include "class2.hpp"
     
    Class2 :: Class2(){
     
    std::cout << "Test OK1" << std::endl;
     
    }
    Et enfin le fichier class2.hpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef DEF_CLASS2
    #define DEF_CLASS2
     
    class Class2{
     
    public:
    Class2();
    };
     
    #endif
    Voila ce code (certes on peut l'améliorer, et c'est digne selon vous d'un débutant j'en conviens :-°) mais aussi mauvais soit-il il compile ce qui est déjà une bonne chose (en tout cas pour moi). Et puis j'ai eu l'idée de mettre un argument et là... RIEN NE VAS PLUS... j'ai des références indéfinies... je vous poste les modifications :

    le fichier main.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <iostream>
    #include "class1.hpp"
     
    int main(){
    Class1 class1;
    return EXIT_SUCCESS;
    }
    le fichier class1.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    #include "class1.hpp"
     
    Class1 :: Class1(){
     
    class2("hello");
     
     
    }
    le fichier class1.hpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef DEF_CLASS1
    #define DEF_CLASS1
     
    #include "class2.hpp"
     
    class Class1{
     
    public:
    Class1();
    Class2 class2(std::string a);
    };
     
    #endif
    le fichier class2.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    #include "class2.hpp"
     
    Class2 :: Class2(std::string a){
     
    std::cout << "Test OK1" << a << std::endl;
     
     
    }
    et enfin le fichier class2.hpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef DEF_CLASS2
    #define DEF_CLASS2
     
    class Class2{
     
    public:
    Class2(std::string a);
     
    };
     
    #endif
    Voila là j'ai le message d'erreur suivant :

    class1.cpp.text+0x4c) : référence indéfinie vers « Class1::class2(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) »

    Si quelqu'un pouvait m'aider je vous remercie mille fois d'avance....vu le nombre d'heures que je suis sur ce problème...

    PS : je précise qu'on peut exclure les erreurs dues à des problème de compilations je compile de la manière suivante : g++ main.cpp class1.cpp class2.cpp -o test

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Class1 :: Class1(){
    class2;
    }
    class2; ne fait strictement et absolument rien.

    Plus loin, class2("hello"); appelle un opérateur() qui prend une chaîne de caractères.

    Ce que tu veux faire, à priori, c'est initialiser class2 avec "hello", et vu que tu dois utiliser le constructeur, il faut utiliser la liste d'initialisation. Class1::Class1() : class2("hello") {}
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 10
    Par défaut
    Je viens d'essayer mais je tombe sur le message suivant malheuresement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class1.cpp:4:22: error: class ‘Class1’ does not have any field named ‘class2’

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Il faut aussi corriger le fichier class1.hpp qui doit définir class2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       // Class2 class2(std::string a); déclarait une fonction retournant un Class2
       Class2 class2; // déclare bien un membre class2 de type Class2

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/07/2011, 11h51
  2. Réponses: 1
    Dernier message: 01/06/2009, 10h56
  3. Eval d'une propriété d'une classe dans une classe
    Par bizet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/10/2008, 09h43
  4. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  5. Réponses: 1
    Dernier message: 25/10/2007, 18h04

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