templates et héritage

templates et héritage - C++ - Programmation

Marsh Posté le 13-07-2005 à 16:48:37    

bonjour,
 
le code suivant ne compile pas avec gcc :
 
template<class A, class B>
class C
{
 public :
 
 typedef int D;
 D * d;
 
};
 
template<class A, class B>
class E : C<A,B>
{
 public:
 
 void something()
 {
  d;
 }
};
 
pour gcc la variable d n'est pas déclarée
une idée ?

Reply

Marsh Posté le 13-07-2005 à 16:48:37   

Reply

Marsh Posté le 13-07-2005 à 17:08:37    

tu fais un héritage privé :o

Reply

Marsh Posté le 13-07-2005 à 17:27:39    

ça plante si j'explicite l'héritage public :
 
template<class A, class B>
class C
{
 public :
 
 typedef int D;
 D * d;
 
};
 
template<class A, class B>
class E : public C<A,B>
{
 public:
 
 void something()
 {
  D * d1 = d;
  D * d2 = d1;
  d1 = d2;
 }
};

Reply

Marsh Posté le 13-07-2005 à 17:34:33    

a y est trouvé, faut mettre  
 
C<A,B>::d;

Reply

Marsh Posté le 13-07-2005 à 17:40:15    

oui, et préciser typename, probablement

Reply

Marsh Posté le 13-07-2005 à 17:52:30    

pas besoin du typename dans ce cas-là, du mal à y croire d'ailleurs ;)

Reply

Marsh Posté le 13-07-2005 à 17:55:09    

j'ai fait des tests chez moi et ma version de gcc m'a réclamé un typename
 
edit :

Citation :

g++ (GCC) 3.4.2 (mingw-special)
Copyright (C) 2004 Free Software Foundation, Inc.


Message édité par theshockwave le 13-07-2005 à 17:56:00
Reply

Marsh Posté le 13-07-2005 à 21:03:40    

theshockwave a écrit :

j'ai fait des tests chez moi et ma version de gcc m'a réclamé un typename


normal, c'est un nom qualifié dependant.
 

Citation :

tu fais un héritage privé :o


pourquoi pas ? Il n'y a pas besoin de plus dans son cas.
 

Code :
  1. template<class A, class B>
  2. class C
  3. {
  4. public :
  5.     typedef int D;
  6.     D* d;
  7. };
  8. template<class A, class B>
  9. class E : private C<A,B>
  10. {
  11. public:
  12.     void something()
  13. {
  14.     typename C<A,B>::D* d1 = C<A,B>::d;
  15.     typename C<A,B>::D* d2 = d1;
  16.     d1 = d2;
  17. }
  18. };


Reply

Marsh Posté le 13-07-2005 à 21:06:41    

t'as le droit de protéger d et/ou le typedef aussi ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed