Как вернуть метод класса в методе string ToString() const
representationShape - это строковое представление фигуры. В базовом интерфейсе IShape должен быть метод std::string ToString() const, возвращающий строковое представление фигуры.
Ошибка 1 error C2662: std::string IShape::representationShape(void): невозможно преобразовать указатель "this" из "const IShape" в "IShape &" 21 1 ConsoleApplication2
Проблема исчезает если убрать const.
class IShape
{
public:
virtual double square() = 0;
virtual double perimeter() = 0;
virtual string representationShape() = 0;
string ToString() const
{
return representationShape();
}
virtual ~IShape();
};
Ответы (1 шт):
Не обязательно убирать можно и добавить:
virtual string representationShape() const = 0;
Проблема у вас в том, что ваш метод representationShape() объявлен как "я верну string, и при этом изменю внутреннее состояние класса". А
string ToString() const
как "я верну strng и обещаю не менять внутреннее состояние класса". Раз пообещал - надо выполнять и НЕ вызывать то, что может изменять объект.
Я думаю, что вы не собираетесь в representationShape() менять объект класса, поэтому можно добавить const. Но если собираетесь - ну, создавайте копию объекта в ToString и работайте с нею...