В этом коде есть несколько проблем; Прежде всего, нет необходимости присущи другому классу! Наследование определяется как отношение «является». Часы не являются ограниченным счетчиком, они имеют 3 различных счетчика - секунды, минуты, часы (таким образом, у нас есть отношение «имеет»). Поэтому вы должны изменить отношение к композиции. Практическое правило - вы должны предпочесть состав над наследованием .
Во-вторых, вы не можете инициализировать нефиксированные c переменные-члены вот так, это должно быть сделано внутри нестати c функции (и, скорее всего, в ctor класса). Обратите внимание, что я поместил его в список инициализаторов, а не в тело ctor, что является лучшей практикой.
Следующий код правильно компилируется:
class boundedCounter {
private:
int value, limit;
public:
boundedCounter(int boundLimit) {
value = 0;
limit = boundLimit;
}
void next() {
if (++value == limit) {
value = 0;
}
}
void setLimit(int boundLimit) {
limit = boundLimit;
}
int getValue() {
return value;
}
};
class Clock {
public:
boundedCounter seconds;
boundedCounter minutes;
boundedCounter hours;
Clock() :
seconds(60),
minutes(60),
hours(24)
{
}
};