J'ai reçu un diamant. Je veux accéder au membre de la classe. J'utilise mingw.
Question est: Comment accéder à un membre "top :: A" sans classe redéclarantAccès à un membre de classe ambigu
#include <cstdio>
class top {
public:
const char A;
top(): A('t') {}
};
class left: public top {
public:
const char A;
left():A('l'){}
};
class right: public top {};
class bottom: public left, public right {};
int main() {
bottom obj;
printf("%c\n", obj.bottom::right::A); //using right::A, inherited from top::A
printf("%c\n", obj.bottom::left::A); //using left::A and left::top::A is hidden
//printf("%c\n", obj.bottom::left::top::A); //error. How to access it?
return 0;
}
Quand je Supprimer le commentaire MinGW me donne une erreur:
'top' is an ambiguous base of 'bottom'
Mise à jour: On dirait que types de moulage travaux:
printf("%c\n", static_cast<top>(static_cast<left>(obj)).A);
printf("%c\n", static_cast<left>(obj).::top::A);
printf("%c\n", reinterpret_cast<top&>(obj).A);//considered bad
printf("%c\n", (reinterpret_cast<top*>(&obj))->A);//considered evil
// printf("%c\n", static_cast<top&>(obj).A);//error
Aussi, n'a pas de diamants dans votre héritage. C'est mauvais. –
Voulez-vous savoir à propos de l'héritage virtuel, ou voulez-vous réellement savoir comment accéder aux deux copies séparées, non-virtuelles de 'top'? –
@Kerrek veut réellement comment accéder à deux copies distinctes non-top de top, car la mémoire le contient. – all