#include <iostream>
using namespace std;
class hello;
class demo
{
private :
void fun()
{
printf ("Inside fun \n");
}
public :
void sun()
{
hello hobj;
hobj.run();
}
friend class hello;
};
class hello
{
private :
void run ()
{
printf("Inside Run \n");
}
public :
void gun ()
{
demo dobj;
dobj.fun();
}
friend class demo;
};
int main ()
{
demo dobj1;
dobj1.sun();
cout<<"Inside Demo \n";
hello hobj1;
hobj1.gun();
cout<<"Inside hello \n";
return 0;
}
如何让彼此成为两个班级的朋友? 我知道如何让其他班级的一个班级朋友,但不知道如何让它成为彼此的朋友,我尝试单独的前进声明,这两个班级仍然不起作用?是否有可能做到这一点 ?
它一直给我这些错误
error C2228: left of '.run' must have class/struct/union
error C2079: 'hobj' uses undefined class 'hello'
答案 0 :(得分:3)
我认为你的问题在于使用不完整类型:
void sun() {
hello hobj;
hobj.run();
}
当您定义函数sun()
时,已声明类hello
但尚未 。这就是为什么你不能在函数中使用它,编译器应该给你一个错误。
为了解决这个问题,只需在sun()
类的定义之后定义函数hello
。
因此,您的班级demo
将是:
class hello;
class demo {
// ...
public:
void sun(); // declaration
friend class hello;
};
// ...
class hello {
// ...
};
void demo::sun() {
// here the implementation and you can use 'hello' instance w/o problem.
hello hobj;
hobj.run();
}
答案 1 :(得分:0)
您的问题与如何将类设置为彼此的朋友无关,而是因为您尝试创建不完整类型的变量。在
void sun()
{
hello hobj;
hobj.run();
}
hello
仍然是不完整的类型,因此您无法创建该类型的对象。您需要做的是将成员函数移出行并在hello
被定义为
class demo
{
//...
public :
void sun(); // <- just a declaration here
friend class hello;
};
class hello
{
//...
};
void demo::sun() // <- definition here
{
hello hobj;
hobj.run();
}