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
A.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 #ifndef _A_H #define _A_H #include "B.h" class A { public: A(); friend void B::f(A); private: int x; }; #endif /* _A_H */
B.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #include "A.h" A::A() { x=10; }
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 #ifndef _B_H #define _B_H class A; class B { public: B(); void f(A); private: }; #endif /* _B_H */
voici l'erreur:
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; }
j'ai cherché dans des tutos de developpez.com ainsi que dans des livres que j'ai mais sans succès.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.)
savez-vous comment modifier mon programme pour qu'il marche?
olivier.
Partager