C++ 如何使在某个命名空间中声明的类成为全局范围中定义的其他类的朋友

C++ 如何使在某个命名空间中声明的类成为全局范围中定义的其他类的朋友,c++,c++17,C++,C++17,我希望类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 {

我希望类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;
}
#包括
#包括
使用名称空间std;
C类
{
朋友类别A::B;
};
名称空间A
{
B类
{
};
}
名称空间D
{
B类
{
};
}
int main()
{    

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

namespace A {
    class B;
}

我看不出有什么问题。在命名空间
A
之后定义
C
应该行得通。谢谢。我的前向声明不正确,比如“class A::B”