gpt4 book ai didi

c++ - 命名空间内的类友元函数

转载 作者:可可西里 更新时间:2023-11-01 14:57:04 29 4
gpt4 key购买 nike

我试图像这样在命名空间之外定义一个类友元函数:

namespace A{
class window{
private:
int a;
friend void f(window);
};
}

void f(A::window rhs){
cout << rhs.a << endl;
}

我收到一个错误,说有歧义。并且有两个候选 void A::f(A::window);void f(A::window)。所以我的问题是:

1) 如何使全局函数 void f(A::window rhs) 成为类 A::window 的友元。

编辑:(阅读答案后)

2) 为什么我需要通过 ::f(window) 将窗口类中的成员函数 f 限定为全局的?

3) 为什么我需要在这种特殊情况下预先声明函数 f(A::window) ,而当类不是在命名空间内定义时,在函数被声明为 a 之后声明函数是可以的 friend 。

最佳答案

除了添加 :: 之外,您还需要转发声明它,例如:

namespace A { class window; }

void f(A::window);

namespace A{
class window{
private:
int a;
friend void ::f(window);
};
}

void f(A::window rhs){
std::cout << rhs.a << std::endl;
}

请注意,要使此前向声明起作用,您还需要前向声明该类!

关于c++ - 命名空间内的类友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934226/

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