我试图了解嵌套类中的友元概念,但是我没有正确理解该概念。我已经编写了一个示例程序来了解它,但是该程序无法正常工作

#include<iostream>

using namespace std;


class outerClass
{
    private:
        int a;
    public:
        class innerClass;
        bool print(innerClass);
};

class innerClass
{
    friend class outerClass;
    private:
        int b;

    public:
        innerClass() =default;

};

bool outerClass::print(outerClass::innerClass obj)
{
    cout<<"Value of b in inner class is:"<<obj.b;
}

int main()
{
    outerClass in;
    outerClass::innerClass obj;
    obj.b=5;
    in.print(obj);
}

我遇到以下错误:
try.cpp: In member function ‘bool outerClass::print(outerClass::innerClass)’:
try.cpp:26:6: error: ‘obj’ has incomplete type
try.cpp:11:15: error: forward declaration of ‘class outerClass::innerClass’
try.cpp: In function ‘int main()’:
try.cpp:34:28: error: aggregate ‘outerClass::innerClass obj’ has incomplete type and cannot be defined

当我阅读互联网上的文章时,我了解到以下几点,如果它们正确或不正确,请对其进行评论:
  • innerClass可以默认访问externalClass的所有成员。
  • 为了使externalClass访问innnerClass的私有(private)成员,我们需要将externalClass作为innerClass的 friend 类。

  • 请帮助指出代码中的错误以及我理解的观点是否正确。

    最佳答案

    如果要在innerClass之外定义outerClass,请执行以下操作:

    class outerClass
    {
        class innerClass; // forward declaration
    };
    
    class outerClass::innerClass // definition
    {
    };
    

    剩下的就可以了,除了obj.b=5。允许outerClass类访问innerClass::b,但不允许访问main()函数。



    正确的。从标准 [class.access.nest] 中:





    正确的。从标准 [class.access.nest] 中:

    关于c++ - 嵌套类中的友元C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40001188/

    10-11 23:11