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

标签 c++ namespaces friend-function

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

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/

相关文章:

c++ - 如何使用 CImg.h 库在另一张图片上显示一张图片?

python - 使用字典访问 Python 中类的嵌套实例

c++ - 没有匹配的函数调用错误

c++ - 为什么找到 f1 但找不到 f2?

c++ - 如何在 C++ 列表中保存计时时间

c++ - 促进 Hana 概念实现

c++ - 用纯虚拟覆盖虚拟..可以吗?

php - 如何获取对象的非限定(短)类名?

php - 为什么它在找到脚本时没有找到类?

c++ - 将命名空间声明为类的 friend