这样写为什么是错误的?已经提前声明了mygoods,但是为什么还是会报错未定义,把mygoods修改到goodgay之前定义,就不会有问题
编译错误提示:
```c++
invalid use of incomplete type 'class mygoods'
invalid use of incomplete type 'class mygoods'
invalid use of incomplete type 'class mygoods'
程序代码如下:
#include <iostream>
using namespace std;
#include <string>
class mygoods;
class goodgay
{
public:
goodgay()
{
goods = new mygoods;
}
void usegoods()
{
cout<<"use public:"<<goods->gs1<<endl;
cout<<"use public:"<<goods->gs2<<endl;
}
mygoods *goods;
};
class mygoods
{
friend class goodgay;
public:
mygoods()
{
gs1 = "抽纸";
gs2 = "水杯";
}
string gs1;
private:
string gs2;
};
void test01(void)
{
goodgay gay1;
gay1.usegoods();
}
int main(void)
{
cout<<"hello world"<<endl;
test01();
system("pause");
return 0;
}
```
#include <iostream>
using namespace std;
#include <string>
class mygoods;
class goodgay
{
public:
goodgay();
void usegoods();
mygoods *goods;
};
class mygoods
{
friend class goodgay;
public:
mygoods()
{
gs1 = "抽纸";
gs2 = "水杯";
}
string gs1;
private:
string gs2;
};
goodgay::goodgay()
{
goods = new mygoods;
}
void goodgay::usegoods()
{
cout<<"use public:"<<goods->gs1<<endl;
cout<<"use public:"<<goods->gs2<<endl;
}
void test01(void)
{
goodgay gay1;
gay1.usegoods();
}
int main(void)
{
cout<<"hello world"<<endl;
test01();
system("pause");
return 0;
}
另外,英文单词不晓得含义的去查一查,别瞎用。
【以下回答由 GPT 生成】
问题分析: 在C++中,类之间可以使用友元函数和友元类进行访问。友元函数和友元类能访问对方类的私有成员。在给类定义友元时,被授予权限的类要先定义好,否则无法正常编译。
解决方案: 问题出现在goodgay
类中,它在定义时使用了mygoods
类,但是在那时mygoods
类还没有定义。解决这个问题的方法是将goodgay
类定义放在mygoods
类定义之后。
修改后的代码如下:
#include<iostream>
using namespace std;
#include<string>
class mygoods;
class goodgay
{
public:
goodgay()
{
goods = new mygoods;
}
void usegoods()
{
cout<<"use public:"<<goods->gs1<<endl;
cout<<"use private:"<<goods->gs2<<endl;
}
mygoods *goods;
};
class mygoods
{
friend class goodgay;
public:
mygoods()
{
gs1 = "抽纸";
gs2 = "水杯";
}
private:
string gs1;
string gs2;
};
void test01()
{
goodgay gay1;
gay1.usegoods();
}
int main()
{
cout<<"hello world"<<endl;
test01();
system("pause");
return 0;
}
现在编译正常,并且输出结果如下:
hello world
use public:抽纸
use private:水杯