héritage template ,compilation
Bonjour je suis toujours en période d'apprentissage.
Après plusieurs recherches je ne comprend pas pk je ne peu pas compiler le programme .
Je compile sur ubuntu avec g++.
je met juste la partie clé qui bug.
J'ajoute que je ne met pas la forme de coplien car il n'y a pas d'allocation mémoire.
class A
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#ifndef DEF_A
#define DEF_A
#include "iostream"
#include "C.h"
#include <cstdlib>
#include <ctime>
using namespace std;
template <typename T> class A<T>{
private :
T valeur;
public :
/////////////////////////////////////////////////////////
A(){
srand(time(NULL));
valeur=(T) ((rand() % (1000 - 1 + 1)) + 1)/10;
}
/////////////////////////////////////////////////////////
void vue(){
cout << "class A " <<valeur << endl;
}
/////////////////////////////////////////////////////////
template <typename T2> void vue2(T2 u ){
cout << (T2)valeur << endl;
}
/////////////////////////////////////////////////////////
};
#endif |
class B qui hérite de B
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
#ifndef DEF_C
#define DEF_C
#include "iostream"
//#include "B.h"
#include "A.h"
#include <cstdlib>
#include <ctime>
using namespace std;
template <typename T> class C : public A <T> {
protected :
T valeurC;
public :
/////////////////////////////////////////////////////////
C(){
srand(time(NULL));
valeurC=(T)((rand() % (1000 - 1 + 1)) + 1)/25;
}
/////////////////////////////////////////////////////////
void vue(){
cout << "class C " <<valeur << " : "<< valeurC <<endl;
}
/////////////////////////////////////////////////////////
template <typename T2> void vue2(T2 u ){
cout << (T2)valeur << endl;
}
/////////////////////////////////////////////////////////
};
#endif |
l'erreur de compilation je le met juste pour les curieux
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
In file included from A.h:4:
C.h:10: error: expected template-name before < token
C.h:10: error: expected { before < token
C.h:10: error: expected unqualified-id before < token
A.h:9: error: A is not a template
In file included from C.h:5:
A.h:9: error: A is not a template
C.h: In member function void C<T>::vue():
C.h:21: error: valeur was not declared in this scope
C.h: In member function void C<T>::vue2(T2):
C.h:25: error: valeur was not declared in this scope
In file included from A.h:4,
from T4.c++:2:
C.h:10: error: expected template-name before < token
C.h:10: error: expected { before < token
C.h:10: error: expected unqualified-id before < token
In file included from T4.c++:2:
A.h:9: error: A is not a template |
je trouve sa bizare qu'il ne veu pas compiler car la syntaxe a l'air bonne.
J'ajoute aussi que je devrais mettre A<T>::valeur pour la class B ,mais je ne pense pas que l'erreur viens de la.
-------------------------------------------------------------------------------------------------------------------------------
Pour les curieux dans:
template <typename T2> void vue2(T2 u ){
cout << (T2)valeur << endl;
}
"u" ne sert juste que à forcer le type voulu à l'affichage,car je n'ai pas trouvé d'autre façon pour le faire.
--------------------------------------------------------------------------
Au passage ,je me suis trompé ,je voulai posté dans C++/débutant