【问题标题】:Overloading " >> " Crashed the program重载“>>”使程序崩溃
【发布时间】:2017-05-07 21:17:56
【问题描述】:
#include <iostream>
#include <sstream>
using namespace std;

class Rupee{
    private:
        int number;
        int number2;
        int number3;
    public:
    Rupee()
    {

    }

    friend ostream &operator<<( ostream &os, const Rupee &e );
    friend istream &operator>>( istream &is, const Rupee &e );
};


    ostream& operator << (ostream & os ,const Rupee &e)
    {

        os<<endl << e.number << endl;
        os << e.number2<< endl;
        os << e.number3<< endl;
        return os;
    }

    istream& operator >> (istream & is ,const Rupee &e)
    {

        is>>e.number>>e.number2>>e.number3;
        return is;
    }



int main()
{
    Rupee o1;

    cin >> o1;
    cout << o1;
}

你好, 我正在尝试使运算符 &lt;&lt; 重载。当我运行该程序时,该程序不会为" &lt;&lt; " 运行,但对于" &gt;&gt; " 运行良好。 我在哪里做错了?我是否为重载函数使用了正确的 istream 和 ostream 类?

【问题讨论】:

  • 你的编译器是如何编译你的提取操作符的实现的:它应该在istream&amp; operator &gt;&gt; (istream &amp; is ,const Rupee &amp;e)函数中抛出错误...
  • 这段代码根本无法编译。
  • 它没有这样做。问题出在哪里?
  • @MuhammadYasirJaved,然后,快点,快点,删除编译器和它附带的每个相关文件。使用较新的编译器。顺便说一句,那是哪个编译器?什么版本?
  • 编译问题是将 const & 传递给 >> 运算符。它需要设置值,所以它不能是 const

标签: c++ oop operator-overloading


【解决方案1】:

评论者指出的编译问题来自将 const 引用传递给 >> 运算符。值被读入变量,因此将其设为 const 会导致编译器错误,应删除 const 关键字:

friend istream &operator >> (istream &is, Rupee &e);

istream& operator >> (istream & is, Rupee &e)

在进行这些更改后,程序编译并运行良好,这里是 Visual Studio 2015。但是,您可能希望在退出时暂停程序以读取输出:

cin.ignore();
cin.get();

【讨论】:

  • 哦..让我也试试。
  • @MuhammadYasirJaved 请从这篇文章中了解编译时错误和运行时错误之间的区别,以及编译时错误消息很容易访问并且供人类阅读和思考的事实.没有理智的编译器输出“你的代码不起作用。”.
  • 是的,我确实知道它们之间的区别,问题是当我在编译器上运行代码时,我有更多的东西。但是,当我将其粘贴到此处时,我删除了不相关的部分,并且不知道它现在甚至无法运行。
猜你喜欢
  • 2016-07-20
  • 2013-11-26
  • 2012-10-12
  • 2011-08-08
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多