gpt4 book ai didi

c++ - 允许访问命名空间外类的 protected 成员函数

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

考虑以下代码:

namespace A
{
class B
{
protected:
friend class C;
static void foo();
};
}

class C
{
public:
C() { A::B::foo(); }
};

int main()
{
C c;
return 0;
}

按照当前的构造,此代码将无法编译 - class B 中声明的友元适用于(当前不存在的)A::C,而不是C 在全局命名空间中。假设我不能将 C 添加到非全局命名空间,我该如何有效地解决这个问题?我试过使用 friend class::C;,但编译器不喜欢那样。我也尝试过在 namespace A 范围之前向前声明 class C;,但这似乎也不起作用。

最佳答案

为类 C 添加前向声明对我有用,您使用的是什么编译器?

class C;

namespace A
{
class B
{
protected:
friend class ::C;
static void foo();
};
}

// ...

Live demo


编辑:正如 Vlad 指出的那样,friend Cfriend::C 也可以工作,前提是您有前向声明.但是 friend class C 没有,我会把那个交给语言律师。

关于c++ - 允许访问命名空间外类的 protected 成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70543672/

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