Bonjour
Je me heurte à un problème en compilation séparée de visibilité entre classes que j’ai simplifié au maximum ainsi :
La classe B
possède seulement une fonction qui renvoie un entier :
B.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part int ret1234 () {return (1234) ;}
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 #ifndef B_H #define B_H class B { public: int ret1234 (void) ; B(); ~B(); }; #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 #include "B.h" int B::ret1234 () { return (1234) ; } B::B() {} B::~B() {}
La classe A
fait un #include <B.h>,
instancie dans le constructeur un objet B : {B objB ;},
déclare la fonction de B en externe : extern int ret1234 (void) ;,
et appelle la fonction de B :
A.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part int A::getValB (void) {return (objB.ret1234 ()) ;}
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
17
18
19 #ifndef A_H #define A_H #include <B.h> extern int ret1234 (void) ; class A { public: int getValB (void) ; A(); ~A(); }; #endif // A_H
Le main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "A.h" int A::getValB (void) { return (objB.ret1234 ()) ; // <<<<<<<<<<<<< Le compilateur ne connait pas objB } A::A() { B objB ; // Instanciation objet classe B } A::~A() {}
instancie un objet A : A objA ;,
et appelle la fonction : objA.getValB ().
Main.cpp
La compilation sous CodeBlocs me renvoie
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> using namespace std; #include <A.h> A objA ; // Instanciation objet classe A int main() { cout << "Test visibilite entre classes!" << endl; cout << objA.getValB () << endl; return 0; }
Je ne comprends pas mon erreur triviale de débutant !A.cpp ligne 5 : ‘obj B’ was not declared in this scope.
J'ai mis tout ce misérable projet codeBlocs ici :
http://www.voilec.com/medias/200123.rar
Merci par avance
Partager