Не имеет типа класса С++
Это один класс из моей программы! Когда я пытаюсь скомпилировать всю программу, я получаю сообщение об ошибке следующего вида:
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;
}
};
Ответы
Ответ 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();