Я запуталась:

Director.cpp

class Director {

  public:
  Director() {

  }

  runScene(Scene _scene) {
    scene = _scene;
  }

  private:
  Scene scene; // <-- Private member "scene" of type Scene.

};

Scene.cpp

class Scene {

  public:
  Scene(int number) {


  }

}

G ++ говорит

нет соответствующей функции для вызова 'Scene :: Scene ()'

Похоже, что он пытается инициализировать scene, что невозможно, потому что нет конструкторов, не принимающих параметров. Я все еще новичок в C ++ - почему он пытается инициализировать этот закрытый член?

Я не уверен, что происходит. Я попытался изменить Scene scene; на Scene scene(int);, в результате чего runScene выдаст ошибку, потому что это заставит компилятор думать, что scene на самом деле является функцией.

Все, что я хочу, - это чтобы у моего класса было свойство-член типа Scene, которое я могу изменить в любое время. Что я делаю неправильно?

c++
0
Saturn 20 Окт 2013 в 13:31
Есть масса дубликатов. В основном используйте список инициализации конструктора: Director (): scene (42) {}
 – 
juanchopanza
20 Окт 2013 в 13:33
Самым простым решением было бы просто объявить Scene() {} в разделе public class Scene, однако правильное решение может сильно отличаться и будет зависеть от того, что именно означает Scene и какой семантике будет член scene
 – 
Erbureth
20 Окт 2013 в 13:45

1 ответ

Лучший ответ

Объявив конструктор в Scerne

Scene(int number) {

}

Вы фактически отключаете конструктор по умолчанию, который не принимает параметров. Вам либо нужно добавить конструктор Scene() (без параметров) в класс сцены, либо ваш конструктор Director должен выглядеть примерно так:

Director() : Scene(0)
{
}
5
N A 20 Окт 2013 в 13:36
Нет, вы вызываете конструктор Scene, который должен иметь то же имя, что и класс, к которому он принадлежит - так что это действительно Scene(0).
 – 
N A
20 Окт 2013 в 23:08