没有类类型c++

does not have class type C++

本文关键字:c++ 类型      更新时间:2023-10-16

这是我程序中的一个类!当我试图编译整个程序时,我得到这样的错误消息:

main.cpp:174: error: '((Scene*)this)->Scene::lake'没有类类型

来源
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;
    }
};

您的问题在以下行:

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行。这被称为成员初始化,这就是构造成员变量的方式。在这个常见问题中了解更多。或者其他一些我在这里和这里发现的花絮

您将lake声明为接受一个参数并返回Lake的方法。然后尝试通过lake.light_up()对其调用一个方法。这会导致您所观察到的错误。

要解决这个问题,你要么需要将lake声明为一个变量,例如Lake lake;,要么你需要停止尝试在其上调用方法。

您已经声明(但从未定义)lake作为Scene的成员函数:

class Scene
{
    // ...
    Lake lake(int L);

但是在plot中,您尝试使用lake,就好像它是一个变量:

int plot()
{
    lake.light_up();

Lake lake(int L);行替换为Lake lake= Lake(L);Lake lake{L};