【发布时间】:2021-01-09 13:53:40
【问题描述】:
编辑:
原程序有多个文件为shown in here
我正在尝试从不同类的朋友成员函数访问我类中受保护的数据成员。
我不断收到访问错误:
9:32:错误:无效使用不完整类型 'class b' 5:7:错误: 成员函数“void b::f(a*)”中“class b”的前向声明: 12:13:错误:'int a::i' 受保护 20:47:错误:在此范围内 上下文
这是我的代码:
// Example program
#include <iostream>
#include <string>
class b;
class a{
public:
friend void b::f(a* pointer);
protected:
int i = 6;
};
class b{
public:
void f(a* pointer){std::cout<<pointer->a::i<<std::endl;}
};
int main()
{
a a1;
b b1;
b1.f(&a1);
}
【问题讨论】:
-
要将
b::f()声明为friend,必须已定义类b。一个简单的class b声明是不够的。 -
@Peter 但是如果两个类是相互依赖的,我该怎么做?
-
在类
b的定义之前放置类a的声明。然后在a类之前定义类b,而不是之后。您还需要移动b::f()的定义,使其位于类定义之外(不是内联)。 -
"但是如果两个类是相互依赖的,我该怎么做呢?"更改您的设计,使它们不会相互依赖。有很多解决方案,取决于实际目标是什么......
标签: c++ friend-function