gpt4 book ai didi

c++ - 消除C++中菱形问题访问顶级成员的歧义

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:32 28 4
gpt4 key购买 nike

首先我要承认有 many questions with similar titles和题材。我相当确定我的是独一无二的。

给定代码

struct Top {
int get() {
return 0;
}
};

struct Mid1 : Top {
int get() {
return 1;
}
};

struct Mid2 : Top {
int get() {
return 2;
}
};

struct Bottom : Mid1, Mid2 {

};

int main(int argc, char ** argv) {
Bottom b;
std::cout << b.Mid1::get();
std::cout << b.Mid2::get()
std::cout << b.Top::get();
}

我在尝试访问 Top::get() 时遇到错误(使用 gcc mingw-w64)

 error: 'Top' is an ambiguous base of 'Bottom'
std::cout << b.Top::get();

我得到一个错误。在这种情况下,如何向编译器发出信号以在特定继承路径上调用 Top::get

最佳答案

Bottomderived class没有使用 virtual inheritance ,因此它有 2 个不同的 Top 实例 - 一个继承自 Mid1,另一个继承自 Mid2。因此,您必须明确告诉编译器您要从哪个 Top 实例调用 get(),例如:

std::cout << b.Mid1::get(); // OK
std::cout << b.Mid2::get(); // OK
std::cout << b.Top::get(); // ERROR!
std::cout << b.Mid1::Top::get(); // ERROR!
std::cout << b.Mid2::Top::get(); // ERROR!
std::cout << static_cast<Mid1&>(b).Top::get(); // OK
std::cout << static_cast<Mid2&>(b).Top::get(); // OK

Live Demo

关于c++ - 消除C++中菱形问题访问顶级成员的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51993468/

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