2017-04-23 117 views
1

現在學習C++並遇到一些問題。嘗試完成一個示例並確保其工作出現錯誤:錯誤:'operator >>'無法匹配超載istream運算符

錯誤:'operator >>'不匹配(操作數類型是'std :: istream'和'const int') 參數的轉換1會形成不良的

這裏是我的代碼,

#include <iostream> 
#include <sstream> 
#include <cstdlib> 
using namespace std; 

class Distance { 
    private: 
     int feet; 
     int inches; 
    public: 
     Distance() { 
      feet = 0; 
      inches = 0; 
     } 
     Distance(int f, int i) { 
      feet = f; 
      inches = i; 
     } 
     friend ostream &operator<<(ostream &output, const Distance &D) { 
      output << D.feet << "\'" << D.inches << "\"" << endl; 
      return output; 
     } 
     friend istream &operator>>(istream &input, const Distance &D) { 
      input >> D.feet >> D.inches; 
      return input; 
     } 
}; 

int main() { 
    Distance D1(11,10), D2(5,11), D3; 
    cin >> D3; 
    cout << "First Distance : " << D1 << endl; 
    cout << "Second Distance : " << D2 << endl; 
    cout << "Third Distance : " << D3 << endl; 
    return 0; 
} 

試圖超載istream和ostream的運營商,但運行與istream的操作問題>>。

首先想到將變量D.feet和D.inches轉換爲char *,但考慮到我必須將int提供給變量,這看起來不正確。不知道我的代碼有什麼問題,任何人都可以幫忙嗎?

回答

0

刪除const>>運算符超載。

您的Distanceconst'd。

1

[解決]

在這個想通了,問題是,在「常量」在

ostream &operator>>(istream &input , const Distance &D) 

不能說明實際的過程和原因,這是一個矛盾,但也許別人能請解釋?我真的很想深入瞭解它。 謝謝!

+0

http://stackoverflow.com/questions/5598703/c-const-usage-explanation – Pbd

+0

'operator >>'應該修改它的右邊的參數,所以'const'在這裏沒有意義。 – aschepler

+0

錯字,返回類型應該是'istream',而不是'ostream'。 – Anubis