gpt4 book ai didi

c++ - 友元函数出现奇怪的编译器错误

转载 作者:行者123 更新时间:2023-12-02 01:43:22 25 4
gpt4 key购买 nike

以下代码虽然看起来能够编译,但被 GCC/Clang/MSVC 拒绝。

class B {
};
class C : private B {
friend B& to_B(C& c) {
return static_cast<B&>(c);
}
};
class D : private C {
friend C& to_C(D& d) {
return static_cast<C&>(d);
}
friend B& to_B(D& d) {
return to_B(to_C(d));
}
};

为什么编译失败?

GCC 错误消息:

<source>:12:12: error: 'class B B::B' is private within this context
12 | friend B& to_B(D& d) {
| ^
<source>:3:7: note: declared private here
3 | class C : private B {
| ^

最佳答案

我找不到章节和诗句来支持它,但是 C的私有(private)继承使得 B如果从 D 的定义中查找,则完全私有(private).
(本质上, B 首先在继承链中查找,并且由于名称查找在第一个匹配处停止,因此它是 C 私有(private)的。从不考虑全局定义。)

您可以通过修改具有显式作用域的名称查找过程来使其编译:

friend ::B& to_B(D& d) 

关于c++ - 友元函数出现奇怪的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71249100/

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