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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
int ret1234 ()     {return (1234) ;}
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
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
int A::getValB (void)      {return (objB.ret1234 ()) ;}
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
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
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
#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()
{}
Le main
instancie un objet A : A objA ;,
et appelle la fonction : objA.getValB ().

Main.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
#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;
}
La compilation sous CodeBlocs me renvoie
A.cpp ligne 5 : ‘obj B’ was not declared in this scope.
Je ne comprends pas mon erreur triviale de débutant !
J'ai mis tout ce misérable projet codeBlocs ici :

http://www.voilec.com/medias/200123.rar
Merci par avance