Перегрузка ›› в унаследованном классе c++

Я перегрузил оператор ‹‹ в унаследованном классе, он работает нормально, однако, когда я пытаюсь перегрузить оператор >> , он показывает много ошибок. В чем моя ошибка?

class Base{
private:
    virtual std::ostream& print(std::ostream&) const = 0;
    virtual std::istream& read(std::istream&);
protected:
    //atributes
public:
    //other functions
    friend std::ostream& operator << (std::ostream& os, const Base& b) {
        return b.print(os);
    }
    friend std::istream& operator >> (std::istream& is, Base& bb) {
        return bb.read(is);
    }
};

class Inherited: public Base{
private:
    //atributes
    std::ostream& print(std::ostream& os) const {
        //things I want to print
    }
    std::istream& read(std::istream& is){
        //things I want to read
        return is;
    }
public:
    //other functions
};

Определение istream как виртуального чистого (virtual...const = 0;) также не работает.


person Airton Neto    schedule 06.06.2017    source источник
comment
Предоставьте MCVE, который мы можем попытаться скомпилировать, и точный текст ошибок вашего компилятора на этом MCVE.   -  person yeputons    schedule 07.06.2017


Ответы (1)


Вы не объявили read чистым virtual в Base.

virtual std::istream& read(std::istream&);

С приведенным выше объявлением компилятор/компоновщик ожидает реализацию функции в базовом классе. Чтобы решить эту проблему, сделайте функцию чистой virtual функцией Base.

virtual std::istream& read(std::istream&) = 0;

PS Обратите внимание, что это не функция-член const.

person R Sahu    schedule 06.06.2017