Проблема с наследованием C ++ и «константным» взаимодействием - PullRequest
0 голосов
/ 28 октября 2019

У меня есть три разных класса, которые мы будем называть Locomotion, Walk и TimeInfo.

class TimeInfo {
  int timeAtEnd() const {return mTimeAtEnd;}
}

class Locomotion {
  // Stuff
  virtual float getDistanceTravelled() const = 0;  
  virtual int getTimeAtEnd() const = 0;  
}

class Walk : public Locomotion, public TimeInfo {
  // Stuff
  float Walk::getDistanceTravelled() const {return mDistanceTravelled;}  // Works
  int Walk::getTimeAtEnd() const {return TimeInfo::timeAtEnd();}   // DO NOT WORK
}

Моя проблема в том, что в другой части моей программы у меня есть доступ к указателю на объект Locomotion,в действительности это может быть объект Walk или какой-либо другой класс, расширяющий как Locomotion, так и TimeInfo. Из этого указателя локомоции мне нужно получить значение timeAtEnd . У меня проблемы с этим, так как мне не разрешено, чтобы Locomotion сама расширяла TimeInfo, и когда я пытаюсь скомпилировать код, как указано выше, я получаю следующую ошибку:

error: non-member function 'int TimeInfo::timeAtEnd()' cannot have cv-qualifier

Насколько я понимаю проблемув том, что у меня на самом деле нет объекта TimeInfo, доступного внутри Walk :: getTimeAtEnd () , но я понятия не имею, как решить эту проблему ...

1 Ответ

1 голос
/ 28 октября 2019

Вам нужно установить постоянную timeAtEnd (), тогда она будет работать.

class TimeInfo {
    int mTimeAtEnd;
protected:
  int timeAtEnd() const {return mTimeAtEnd;}
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...