首页 > 解决方案 > 如何使在某个命名空间内声明的类成为全局范围内定义的其他类的朋友

问题描述

我希望 A::B 类成为 C 的朋友。命名空间 D 中有另一个同名的类。我该怎么做。在实际的层次结构中,不同的类可能在不同的标题中。

#include <iostream>
#include <cstdlib>
using namespace std;


class C
{
    friend class A::B;
};

namespace A
{
    class B
    {
    };
}

namespace D
{
    class B
    {
    };
}

int main()
{    
    cout << "Hello, friend!" << endl;
}

标签: c++c++17

解决方案


您需要在B之前转发声明类(在正确的命名空间中)class C

namespace A {
    class B;
}

推荐阅读