2017-06-06 61 views
1

我已經超載運算符< <在繼承類,它工作正常,但是當我試圖超載運算符>>,它顯示了很多錯誤。 我的錯誤是什麼?重載>>在繼承類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;)也不起作用。

+0

請提供一個[MCVE](https://stackoverflow.com/help/mcve),我們可以在該MCVE上編譯和準確編譯錯誤文本。 – yeputons

回答

1

您沒有聲明read是純virtualBase

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

通過上面的聲明,編譯器/鏈接器期望在基類中實現函數。要解決此問題,請將該功能設爲Base的純功能virtual

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

PS請注意,這不是一個const成員函數。