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 :

(netbeans) problème de méthode amie


Sujet :

Langage C++

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut (netbeans) problème de méthode amie
    bonjour,

    je voudrais essayer de faire un petit problème avec une méthode amie mais ça plante.
    dans l'exemple, il y a une classe A qui a la méthode f de la classe B pour amie.

    fichiers:

    A.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
    #ifndef _A_H
    #define	_A_H
     
    #include "B.h"
     
    class A {
     
    public:
        A();
        friend void B::f(A);
     
    private:
        int x;
    };
     
    #endif	/* _A_H */
    A.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "A.h"
     
     
    A::A() {
        x=10;
    }
    B.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #ifndef _B_H
    #define	_B_H
    class A;
     
    class B {
    public:
        B();
        void f(A);
    private:
     
    };
     
    #endif	/* _B_H */
    B.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
    #include "B.h"
    #include <iostream>
    using namespace std;
     
    void B::f(A a){
        cout << a.x;
    }
     
     
    B::B() {
    }
     
    int main(int argc, char argv[]){
        A ex;
        f(ex);
     
        return 0;
     
    }
    voici l'erreur:
    B.cpp: In member function `void B::f(A)':

    B.cpp:12: error: `a' has incomplete type

    B.h:10: error: forward declaration of `struct A'

    B.cpp:13: error: invalid use of undefined type `struct A'

    B.h:10: error: forward declaration of `struct A'

    B.cpp: In function `int main(int, char*)':

    B.cpp:21: error: aggregate `A ex' has incomplete type and cannot be defined

    B.cpp:22: error: `f' undeclared (first use this function)

    B.cpp:22: error: (Each undeclared identifier is reported only once for each function it appears in.)
    j'ai cherché dans des tutos de developpez.com ainsi que dans des livres que j'ai mais sans succès.

    savez-vous comment modifier mon programme pour qu'il marche?

    olivier.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Il manque un #include "A.h" dans B.cpp.

    MAT.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    salut,

    merci pour ta réponse.
    j'ai ajouté l'include mais mnt j'ai cette erreur:

    make[1]: Entering directory `/c/Documents and Settings/lolveley/Mes documents/NetBeansProjects/amitie_1'
    /usr/bin/make -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/amitie_1.exe
    make[2]: Entering directory `/c/Documents and Settings/lolveley/Mes documents/NetBeansProjects/amitie_1'
    mkdir -p build/Debug/MinGW-Windows
    rm -f build/Debug/MinGW-Windows/B.o.d
    g++ -c -g -MMD -MP -MF build/Debug/MinGW-Windows/B.o.d -o build/Debug/MinGW-Windows/B.o B.cpp
    B.cpp: In function `int main(int, char*)':

    B.cpp:23: error: `f' undeclared (first use this function)

    B.cpp:23: error: (Each undeclared identifier is reported only once for each function it appears in.)

    make[2]: *** [build/Debug/MinGW-Windows/B.o] Error 1
    make[2]: Leaving directory `/c/Documents and Settings/lolveley/Mes documents/NetBeansProjects/amitie_1'
    make[1]: *** [.build-conf] Error 2
    make[1]: Leaving directory `/c/Documents and Settings/lolveley/Mes documents/NetBeansProjects/amitie_1'
    make: *** [.build-impl] Error 2

    Build failed. Exit value 2.
    je ne comprends pas du tout ce message, il devrait connaître f mnt.

    olivier.

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par olivier57b Voir le message
    j'ai ajouté l'include mais mnt j'ai cette erreur:
    Ce n'est pas la même erreur.
    Pour rappel tu écris :

    Citation Envoyé par olivier57b Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
    int main(int argc, char argv[]){
        A ex;
        f(ex);
     
        return 0;
     
    }
    Or f est une méthode de B. Elle doit donc s'appliquer à un objet de B et non comme une fonction libre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    int main(int argc, char argv[]){
        A ex;
        B b;
        b.f(ex);
     
        return 0;
     
    }

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 958
    Points : 213
    Points
    213
    Par défaut
    ah oui, bien sûr!

    merci,

    olivier.

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

Discussions similaires

  1. problème bizarre, méthode recurssive
    Par akrobat dans le forum C++
    Réponses: 19
    Dernier message: 05/05/2006, 15h22
  2. Problème de méthode
    Par Clad3 dans le forum C++
    Réponses: 2
    Dernier message: 10/09/2005, 12h08
  3. [NETBEANS] problème à la réinstallation
    Par asken dans le forum NetBeans
    Réponses: 2
    Dernier message: 30/03/2005, 13h44
  4. [NetBeans]problème RAD
    Par clemsouz dans le forum NetBeans
    Réponses: 5
    Dernier message: 02/09/2004, 12h20
  5. Réponses: 2
    Dernier message: 29/03/2004, 19h29

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