Не имеет тип класса 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};