Как использовать чисто виртуальный метод внутри класса? Пытаюсь определить родительский класс : #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); ^ Чем это можно побороть?
Ошибка возникает потому, что вы пытаетесь вызвать чисто виртуальный метод 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, и ошибка больше не появится.