Bonjour,
Soit une classe générique Type qui hérite en private d'un de ses paramètres.
Soit une classe Derive dérivant de cette classe générique Type instanciée avec une troisième classe UneBase.
J'ai des erreurs lorsque j'essaie d'accéder à la classe générique Type depuis la classe Derive comme quoi la classe UneBase est inaccessible car privée. Or, je n'accède pas à cette classe privée.
Exemple :
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
31
32
#include <iostream>
 
template<class TBase>
struct Type : private TBase
{
   Type():TBase()
   {
      std::cout<<"Type<>"<<std::endl;
   }
};
 
struct UneBase
{
   UneBase()
   {
      std::cout<<"UneBase"<<std::endl;
   }
};
 
struct Derive : public Type<UneBase>
{
   Derive():Type<UneBase>()
   {
      std::cout<<"Derive"<<std::endl;
   }
};
 
int main()
{
   Derive d;
   return 0;
}
Sur Derive():Type<UneBase>(), j'obtient :
Citation Envoyé par gcc/Mingw
In constructor 'Derive:: Derive()'
error: 'struct UneBase' is inaccessible
error: within this context
Citation Envoyé par VisualExpress
error C2247: 'UneBase' non accessible, car 'Type<TBase>' utilise 'private' pour hériter de 'UneBase'
with
[
TBase=UneBase
]
Bon, je me dis que je vais changer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Derive():Type<UneBase>()
en :
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
31
32
#include <iostream>
 
template<class TBase>
struct Type : private TBase
{
   Type():TBase()
   {
      std::cout<<"Type<>"<<std::endl;
   }
};
 
struct UneBase
{
   UneBase()
   {
      std::cout<<"UneBase"<<std::endl;
   }
};
 
struct Derive : public Type<UneBase>
{
   Derive():Type()
   {
      std::cout<<"Derive"<<std::endl;
   }
};
 
int main()
{
   Derive d;
   return 0;
}
Et là, nouvelle erreur :
Citation Envoyé par gcc/MinGW
In constructor 'Derive:: Derive()':
error: class 'Derive' does not have any field named 'Type'
En revanche Visual accèpte.
Mais je dois pouvoir compiler avec les 2 compilateurs.

J'avoue que je ne vois ni d'où vient le premier problème ni le second.
Mais surtout, je ne vois pas comment résoudre la chose.