2013-04-05 3 views
0

저는 C++을 처음 접했고 istream을 작동 시키려고합니다. 나는 또한의 cpp를 가지고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; 
} 

: 나는의 클래스가가 건너 온다 때마다

#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&); 
관련 문제