2013-04-05 42 views
0

我對C++相當陌生,並且試圖讓istream工作。我有一類: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; 
} 

出現我的問題時,它遇到了 「是>> r1.num;」線。它給了我錯誤:RatClass.exe中的0x772d15de未處理的異常:0xC00000FD:堆棧溢出。

同樣,我是相當新的,所以還沒有學會可能的原因。任何幫助表示讚賞。

回答

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&); 
相關問題