2013-04-17 97 views
2

我想重載>>運算符使用它像cin與我的類。下面是代碼:不能重載>>運算符與istream C++

class Base { 
public: 
    int mx; 
    Base() {} 
    Base(int x) : mx(x) {} 
    friend std::istream &operator>>(std::istream &, Base &); 
    friend std::ostream &operator<<(std::ostream &, const Base &); 

}; 

std::istream &operator >>(std::istream &in, Base &object) { 
    in >> object.mx; 
    return in; 
} 

std::ostream &operator <<(std::ostream &out, const Base &object) { 
    out << object.mx; 
    return out; 
} 

int main() { 

    Base test(); 
    std::cin >> test; 
    std::cout << test; 
    system("PAUSE"); 


    return 0; 

} 

當我嘗試編譯我碰到一個「錯誤C2679:二進制‘>>’:沒有運營商發現這需要基本型(__cdecl *)(無效)的」右手操作'(或沒有可接受的轉換)「 和Intellisense表示沒有運算符'>>'匹配這些操作數。

ostream版本似乎沒有任何問題。

爲什麼?

回答

3

您的代碼有兩個問題。

1)此聲明的函數,而不是限定變量:

Base test(); 

作出這樣的:

Base test; 

2)需要採取的operator>>的第二個參數的引用:

std::istream &operator >>(std::istream &in, Base& object) 

另外,您的代碼並不適用於operator<< ,至少它不會做你期望它做的事情,除非你從上面解決問題1)。

+0

@DouglasEdward沒問題。我看到你編輯了Q,所以問題2)在Q中只是一個錯字,而不是你的代碼,1)是真正的問題?遲早會發生在任何人身上:) –

1

正在創建的對象的方式是錯誤的,應該使用爲: Base test;