0

我对 C++ 相当陌生,并且正在尝试让 istream 工作。我有一类:

class rat
{
private:
    int num;
    int denom;
public:

    rat();
    rat(const int&, const int&);
    rat(const int&);

    friend ostream& operator << (ostream&, const rat&);
    friend istream& operator >> (istream&, const rat&);
};
rat::rat(void)
{
    num = 0;
    denom = 1;
}

rat::rat(const int &n, const int &d)
{
    num = n;
    denom = d;
    simplify();
}

rat::rat(const int &n)
{
    num = n;
    denom = 1;
}

ostream& operator << (ostream &os, const rat &r1)
{
    os << r1.num;
    os << "/";
    os << r1.denom;
    return os;
}

istream& operator >> (istream &is, const rat &r1)
{
    is >> r1.num;
    is >> r1.denom;
    return is;
}

我还有一个 .cpp:

#include <iostream>
#include <conio.h>
using namespace std;
#include "Rats.h"

void main()
{
    rat r1(3,4), r2(2,3), r3;


    system("cls");
    cout << "Please enter a rational number: ";
    cin >> r3;
}

每当遇到“is >> r1.num;”时,我的问题就会出现。线。它给了我错误:RatClass.exe 中 0x772d15de 处的未处理异常:0xC00000FD:堆栈溢出。

同样,我还很新,所以还没有知道可能的原因是什么。任何帮助表示赞赏。

4

1 回答 1

0

看起来这可能是你正在接受的事实,const rat &r1但通过从你发送数据istream你会改变r1。你不能改变常数。不确定这是否是问题,但这是首先想到的明显的事情。

试试这个:

istream& operator >> (istream &is, rat &r1)
{
    is >> r1.num;
    is >> r1.denom;
    return is;
}

不要忘记在课堂上更改您的定义:

friend istream& operator >> (istream&, rat&);
于 2013-04-06T02:23:28.613 回答