编辑:
原始程序有多个文件,如此处所示
我正试图从一个不同的类的友元成员函数中访问我的类中受保护的数据成员。
我一直得到一个访问错误:
9:32:错误:无效使用未完成的类型“b类”5:7:错误:前向声明“b类”在成员函数“void b::f(a *)”中: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
声明是不够的。 - Peterb
之前,先声明类a
。然后在类a
之前而不是之后定义类b
。您还需要将b::f()
的定义移动到类定义之外(而不是内联)。 - Peter