Template et héritage privé.
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:
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:
Derive():Type<UneBase>()
en :
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 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 :aie::
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.
:merci: