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