Не имеет тип класса C++

Это один класс из моей программы! Когда я пытаюсь скомпилировать всю программу, я получаю сообщение об ошибке, подобное этому:

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 ответа

Решение

Ваша проблема в следующей строке:

Lake lake(int L);

Если вы просто пытаетесь объявить Lake объект, то вы, вероятно, хотите удалить (int L), Что у вас там есть функция объявления lake который возвращает Lake и принимает int в качестве параметра.

Если вы пытаетесь передать в L при построении вашего lake объект, то я думаю, что вы хотите, чтобы ваш код выглядел так:

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. Или некоторые другие лакомые кусочки, которые я нашел здесь и здесь.

Вы заявляете lake как метод, который принимает один аргумент и возвращает Lake, Затем вы пытаетесь вызвать метод с помощью lake.light_up(), Это вызывает ошибку, которую вы наблюдаете.

Чтобы решить проблему, нужно либо объявить lake быть переменной, например Lake lake;или вам нужно прекратить пытаться вызвать метод.

Вы объявили (но не определили) lake как функция-член сцены:

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

Но тогда в plot, вы пытаетесь использовать lake как будто это переменная:

int plot()
{
    lake.light_up();

Заменить линию Lake lake(int L); с Lake lake= Lake(L);или с этим: Lake lake{L};

Другие вопросы по тегам