Как использовать чисто виртуальный метод внутри класса? Пытаюсь определить родительский класс : #ifndef OBJECT_H
#define OBJECT_H
#include
#include
class Object
{
private :
virtual void fillBufferForPrint(std::ostringstream &strs) = 0;
public:
Object();
operator std::string();
};
#endif // OBJECT_H#include "object.h"
Object::Object()
{
}
Object::operator std::string() {
std::ostringstream s;
fillBufferForPrint(&s);
return s.str();
}
При попыткке собрать проект выдается ошибка : ***/object.cpp:10: error: no matching function for call to 'Object::fillBufferForPrint(std::ostringstream*)'
fillBufferForPrint(&s);
^
Чем это можно побороть?

21 Авг 2019 в 07:06
188 +1
0
Ответы
1

Ошибка возникает потому, что вы пытаетесь вызвать чисто виртуальный метод fillBufferForPrint напрямую из оператора приведения типа std::string.

Вместо этого вы должны реализовать виртуальный метод fillBufferForPrint в классе-наследнике от Object. Например:

#include "object.h"
class ChildObject : public Object
{
public:
ChildObject() : Object() {}
private:
void fillBufferForPrint(std::ostringstream &strs) override {
strs << "Some data";
}
};

Затем можно создать экземпляр класса ChildObject и вызвать оператор преобразования типа в строку:

int main() {
ChildObject child;
std::string str = static_cast<std::string>(child);
std::cout << str << std::endl;
return 0;
}

Таким образом, вызов метода fillBufferForPrint будет выполнен в контексте класса-наследника ChildObject, и ошибка больше не появится.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир