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 : 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
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 : 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
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 : 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
 
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