没有类类型 C++

Posted

技术标签:

【中文标题】没有类类型 C++【英文标题】:does not have class type C++ 【发布时间】:2013-01-03 17:25:10 【问题描述】:

这是我的课程中的一门课!当我尝试编译整个程序时,我收到如下错误消息:

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 Lake(int L);湖.light_up(); //这没有意义 Lake 是一个班级,我正在尝试在班级场景中创建她的对象湖 当然是一个类,但是lake(小写)是一个方法,你试图调用那个对象的方法,这条线是错误的,lake.light_up(); 提醒人们在不同情况下遇到此错误:我在将QVariant 类型转换为std::string 时遇到了这种情况:x.toString.toStringStd()。我忘记了x.toString() 末尾的()。这让我头上掉了好几根头发。 【参考方案1】:

你的问题在下面一行:

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。

【讨论】:

【参考方案2】:

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

要解决此问题,您要么需要将lake 声明为变量,例如Lake lake;,或者你需要停止尝试调用它的方法。

【讨论】:

【参考方案3】:

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

class Scene

    // ...
    Lake lake(int L);

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

int plot()

    lake.light_up();

【讨论】:

【参考方案4】:

Lake lake(int L); 行替换为Lake lake= Lake(L); 或者这样:Lake lakeL;

【讨论】:

以上是关于没有类类型 C++的主要内容,如果未能解决你的问题,请参考以下文章

C++ 类 Typedef Struct 没有命名类型

Qt C++ 类没有命名类型

没有类或结构的 C++ 排序数据类型

C++ 错误:不允许抽象类类型的对象:纯虚函数没有覆盖器

c++有混合类型吗

C++ 容器与继承