这是我的课程中的一个课程!当我尝试编译整个程序时,我收到如下错误消息:
main.cpp:174:错误:'((场景*)这个) - >场景::湖'没有班级类型
来源
class Scene
{
int L,Dist;
Background back ;
Lake lake(int L);
IceSkater iceskater(int Dist);
public :
Scene(int L, int Dist)
{
cout<<"Scene was just created"<<endl;
}
~Scene()
{
cout<<"Scene is about to be destroyed !"<<endl;
}
};
答案 0 :(得分:17)
您的问题在以下一行:
Lake lake(int L);
如果您只是想宣布一个Lake
对象,那么您可能想删除(int L)
。你所拥有的是声明一个函数lake
,它返回Lake
并接受int
作为参数。
如果您在构建lake
对象时尝试传入L,那么我认为您希望代码看起来像这样:
class Scene
{
int L,Dist;
Background back ;
Lake lake;
IceSkater iceskater;
public :
Scene(int L, int Dist) :
L(L),
Dist(Dist),
lake(L),
iceskater(Dist)
{
cout<<"Scene was just created"<<endl;
}
.....
注意添加到构造函数中的4行。这称为成员初始化,以及它如何构造成员变量。在此faq中了解有关它的更多信息。或者我发现here和here的其他一些花絮。
答案 1 :(得分:3)
您将lake
声明为接受一个参数并返回Lake
的方法。然后,您尝试通过lake.light_up()
调用方法。这会导致您观察到的错误。
要解决此问题,您需要将lake
声明为变量,例如Lake lake;
,或者您需要停止尝试在其上调用方法。
答案 2 :(得分:1)
您已声明(但从未定义)lake
作为Scene的成员函数:
class Scene
{
// ...
Lake lake(int L);
但是在plot
中,您尝试使用lake
,就像它是变量一样:
int plot()
{
lake.light_up();
答案 3 :(得分:0)
将行Lake lake(int L);
替换为Lake lake= Lake(L);
或与此:Lake lake{L};