2017-04-23 91 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