gpt4 book ai didi

c++ - 当类写在命名空间内时如何使用友元函数

转载 作者:行者123 更新时间:2023-11-28 01:00:11 24 4
gpt4 key购买 nike

我已经在命名空间内创建了一个类,现在当我不得不使用或调用命名空间时出现问题,编译器错误的可能原因是什么??

namespace name1    
{
class show
{
int a,b;
void accept_data(void);
void display_data(void);
friend void use_class(void);
};
}

编译器错误 -

test1.cpp:在函数‘void use_class()’中:
test1.cpp:17:6: 错误:‘void name1::show::accept_data()’ 是私有(private)的
test1.cpp:31:16: 错误:在此上下文中
test1.cpp:24:6: 错误:‘void name1::show::display_data()’ 是私有(private)的
test1.cpp:32:17: 错误:在此上下文中

最佳答案

当您使用非限定标识符(如 use_class)声明友元函数时,该声明总是命名该声明所在类的最近封闭命名空间的成员。函数的先前声明不必是可见的。这意味着您的声明将函数 void::name1::use_class() 声明为类 ::name1::show 的友元。

如果你想声明一个来自不同命名空间的 friend ,你必须使用一个合格的id。

例如

friend void ::use_class();

请注意,与非限定情况不同,被友化的函数的先前声明必须是可见的。例如

void use_class();
namespace name1 {
class show {
//...
friend void ::use_class();
//...
};
}

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

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