gpt4 book ai didi

c++ - 两个类(class)的 friend

转载 作者:太空狗 更新时间:2023-10-29 20:19:47 24 4
gpt4 key购买 nike

我试图让两个类彼此成为 friend ,但我不断收到“使用未定义类型 A”的错误消息。

这是我的代码:

我尝试添加 A 类;如上图所示,但仍然相同。

#include <iostream> 
class A;
class B
{
private:
int bVariable;
public:
B() :bVariable(9){}
void showA(A &myFriendA)
{
std::cout << "A.aVariable: " << myFriendA.aVariable << std::endl;// Since B is friend of A, it can access private members of A
}
friend class A;
};
class A
{
private:
int aVariable;
public:
A() :aVariable(7){}
void showB(B &myFriendB){
std::cout << "B.bVariable: " << myFriendB.bVariable << std::endl;
}
friend class B; // Friend Class
};
int main() {
A a;
B b;
b.showA(a);
a.showB(b);

system("pause");
return 0;
}

我正在尝试通过友元让 A 类访问 B 类,反之亦然。

最佳答案

您无法访问 myFriendA.aVariable,因为编译器不知道它的存在。它只知道类 A 存在(因为第二行的前向声明),但它还没有完全定义,所以它不知道它的成员/方法是什么。

如果你想让它工作,showA() 必须在类范围之外声明。

class A;
class B
{
private:
int bVariable;
public:
B() :bVariable(9){}
void showA(A &myFriendA);

friend class A;
};
class A
{
private:
int aVariable;
public:
A() :aVariable(7){}
void showB(B &myFriendB){
std::cout << "B.bVariable: " << myFriendB.bVariable << std::endl;
}
friend class B; // Friend Class
};

// Define showA() here
void B::showA(A &myFriendA)
{
std::cout << "A.aVariable: " << myFriendA.aVariable << std::endl;
}

int main() {
A a;
B b;
b.showA(a);
a.showB(b);

system("pause");
return 0;
}

关于c++ - 两个类(class)的 friend ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56568242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com