Bonsoir,
J'ai un petit problème avec une architecture à base de template.
On dirait que je ne peut pas accéder aux membres protected, d'une classe de base dans une classe dérivée.
J'ai grandement simplifié le code pour en arriver là:
Code main.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #include <cstdlib> #include "B.h" int main(int argc, char * argv[]) { B<int> b; return EXIT_SUCCESS; }
Code A.h : 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 _A_H #define _A_H template<typename T> class A { public: virtual ~A(); protected: T var; }; #include "A.tpp" #endif
Code A.tpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 template<typename T> A<T>::~A() {}
Code B.h : 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 _B_H #define _B_H #include "A.h" template <typename T> class B : public A<T> { public: B(); virtual ~B(); }; #include "B.tpp" #endif
Code B.tpp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 template<typename T> B<T>::B() { var = 0; //Problème ici } template<typename T> B<T>::~B() { }
J'utilise g++ 4.1.2 et j'ai ce message d'erreur:
g++ -c -Wall -Werror -pedantic -pedantic-errors -O3 -std=c++98 main.cpp -o main.o
B.tpp: In constructor ‘B<T>::B()’:
B.tpp:4: error: ‘var’ was not declared in this scope
make: *** [main.o] Erreur 1
Partager