gpt4 book ai didi

c++ - 访问不明确的类成员

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:17 24 4
gpt4 key购买 nike

我有一颗钻石。我想访问类(class)成员。我正在使用 mingw。
问题是:如何在不重新声明类的情况下访问成员“top::A”

#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;
}

当我删除评论时 mingw 给我一个错误:

'top' is an ambiguous base of 'bottom'  

更新:看起来转换类型有效:

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

最佳答案

在不使用虚拟继承的情况下,您可以稍微修改类型以说服编译器选择正确的基类:

printf("%c\n", static_cast<left&>(obj).::top::A);

关于c++ - 访问不明确的类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047388/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com