2012-02-09 4 views
1

C++로 돌아 가려고하는데, 오랫동안 두 번째 프로그램입니다. cin >> stopat; 어디 까지나 일반적인 오류 인 것 같습니다 : error: no match for 'operator>>' in 'std::cin >> stopat' 나는이 문제의 원인을 설명하는 몇 가지를 살펴 봤지만 실제로는 이해할 수 없습니다 (프로그래밍에 대한 내 경험이 부족한 관계로 인해).). 이 오류의 원인은 무엇입니까? 그리고 오류가 다시 발생하는 경우 어떻게 해결합니까?오류 : 'std :: cin >> stopat'에서 'operator >>'와 일치하지 않습니다.

#include <iostream> 
#include "BigInteger.hh" 

using namespace std; 

int main() 
{ 
    BigInteger A = 0; 
    BigInteger B = 1; 
    BigInteger C = 1; 
    BigInteger D = 1; 
    BigInteger stop = 1; 
    cout << "How Many steps? "; 
    BigInteger stopat = 0; 
    while (stop != stopat) 
    { 
     if (stopat == 0) 
     { 
      cin >> stopat; 
      cout << endl << "1" << endl; 
     } 
     D = C; 
     C = A + B; 
     cout << C << endl; 
     A = C; 
     B = D; 
     stop = stop + 1; 
    } 
    cin.get(); 
} 

편집 : 어떻게 든, 나는 참조 된 라이브러리를 링크하는 것을 생각하지 않았다. 여기에 그들이있다 : https://mattmccutchen.net/bigint/

+2

'BigInteger' 무엇인가

기본적으로, 당신이 필요한 것은 다음과 같습니다 함수는? '>> '연산자가없는 것처럼 보입니다. –

+0

BigInteger 란 무엇입니까? 클래스의 이름이면 확실히 오버로드 된 연산자 >>가 없습니다. 'BigInteger' 클래스는 확실히 문자열로부터 숫자를 파싱하는 멤버 함수를 가지고 있기 때문에 (적어도 그것이 그러한 생성자를 제공한다면 이해할 수있을 것입니다) 불필요한 복사를 포함 할 수 있습니다 : – mikithskegg

답변

2

당신은 우리의 BigInteger의 코드를 표시하지 않은,하지만이 필요 함수는 다음과 같이 (BigInteger.hh 또는 자신의 코드에 하나) 정의 할 :

std::istream& operator >>(std::istream&, BigInteger&); 

이 함수는 실제로 스트림에서 "단어"를 가져 와서이를 BigInteger로 변환하려고 구현해야합니다.

std::istream& operator >>(std::istream& stream, BigInteger& value) 
{ 
    std::string word; 
    if (stream >> word) 
     value = BigInteger(word); 
} 

편집 : 이제 사용되고 라이브러리를 지적 즉, 여기서 뭐있어 운이 좋다면, BigInteger를는이 같은 것이 경우 문자열을 사용하는 생성자를해야합니다 넌 할 수있어. 해당 ostream 연산자를 제공하므로 라이브러리 자체가이 작업을 수행해야하지만 일반적으로 볼 때 라이브러리 품질 스트림 연산자가 여기 쓰는 것보다 복잡하다는 것을 알 수 있습니다.

+0

'value = BigInteger (word)' – Xeo

+0

나는 OP에서 문제의 실제 라이브러리에 대한 링크를 게시 했으므로 이제 확실히 알 수 있습니다. 그에 따라 내 대답을 업데이트 할 것입니다. –

0

여기에서 생략 한 내용은 BigInteger 클래스에 대한 세부 정보입니다. >> 연산자로 입력 스트림에서 하나를 읽으려면 클래스에 대해 operator>> (종종 스트림 추출기라고 함)을 정의해야합니다. 그게 당신이 의미하는 컴파일러 오류입니다.

std::istream &operator>>(std::istream &is, BigInteger &bigint) 
{ 
    // parse your bigint representation there 
    return is; 
}