17

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

main.cpp:174: 错误: '((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;
    }
};
4

4 回答 4

17

您的问题在以下行中:

Lake lake(int L);

如果您只是想声明一个Lake对象,那么您可能想要删除(int L). 您所拥有的是声明一个lake返回 aLake并接受 aint作为参数的函数。

如果您在构造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 行。这称为成员初始化,以及构造成员变量的方式。在此常见问题解答中了解更多信息。或者我在这里这里发现的其他一些花絮。

于 2013-01-03T17:28:12.657 回答
3

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

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

于 2013-01-03T17:28:11.157 回答
1

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

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

但是然后在 中plot,您尝试将lake其用作变量:

int plot()
{
    lake.light_up();
于 2013-01-03T17:29:11.277 回答
0

Lake lake(int L);用或替换该行Lake lake= Lake(L);Lake lake{L};

于 2018-09-29T05:02:15.607 回答