Подтвердить что ты не робот

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

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

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;
    }
};
4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

int plot()
{
    lake.light_up();