C ++ Как дать переменной-члену в абстрактном классе значение по умолчанию? - PullRequest
0 голосов
/ 22 мая 2010

В шапке я определяю bool isActive. В классах, производных от этого, я бы хотел сделать isActive false по умолчанию. Я попытался сделать это, добавив

AbstractClass::isActive = false; 

в файл cpp, но это вызывает ошибку «Ожидаемый конструктор, деструктор или преобразование типа перед токеном =».

Ответы [ 2 ]

9 голосов
/ 22 мая 2010

Инициализируйте его в конструкторе класса:

class AbstractClass {
   bool isActive;

   AbstractClass() : isActive(false) {
   }

   // ...
};

То, что класс содержит абстрактные методы, не мешает ему иметь конструктор, который используется для инициализации переменных-членов.

0 голосов
/ 22 мая 2010

AbstractClass::isActive = false;

относится к (несуществующему) члену статического класса. Если бы он существовал, он существовал бы как единый общий экземпляр для всего класса, и вы фактически инициализировали бы его, как и раньше.

Но у вас есть переменная instance , что означает, что каждый экземпляр класса имеет свою собственную копию. Чтобы инициализировать , что , вы должны делать то, что говорите; инициализируйте его в ctor класса, либо в теле ctor, либо лучше, как предполагает sth, в списке инициализаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...