我试图了解嵌套类中的友元概念,但是我没有正确理解该概念。我已经编写了一个示例程序来了解它,但是该程序无法正常工作
#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
之外定义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/