2014-04-22 5 views
0

다항식 클래스가 있고 +, -, * 연산자와 < < 연산자를 오버로드했습니다. 단일 다항식 객체가 아닌 poly1 + poly2와 같은 표현식을 출력하려고 시도하기 전에는 모두 잘 작동하는 것처럼 보입니다. 내 < < 운영자 코드 (I 이미 제대로 작동 인쇄 멤버 함수가) 여기에연산자 오버로드 문제 C++

Polynomial operator+ (const Polynomial& poly1, const Polynomial& poly2){ 
    vector<int> final_coeffs; 

    if (poly1.Degree()>poly2.Degree()) 
    { 
     for (int i=0; i<=poly2.Degree(); i++) 
      final_coeffs.push_back(poly2.Coefficient(i) + poly1.Coefficient(i)); 
     for (int i=poly2.Degree()+1; i<=poly1.Degree(); i++) 
      final_coeffs.push_back(poly1.Coefficient(i)); 
    } 

    else 
    { 
     for (int i=0; i<=poly1.Degree(); i++) 
      final_coeffs.push_back(poly1.Coefficient(i) + poly2.Coefficient(i)); 
     for (int i=poly1.Degree()+1; i<=poly2.Degree(); i++) 
      final_coeffs.push_back(poly2.Coefficient(i)); 
    } 

    return Polynomial(final_coeffs); 
} 

: 그리고 여기

내 더하기 연산자 코드

ostream& operator<< (ostream& out, Polynomial& poly){ 
    poly.print(); 
    return out; 
} 

문제는 경우에 발생 I 메인에서 이것을 시도하십시오 :

cout << poly1+poly2; 

B 유타가 잘 작동이 그냥 할 경우 :

cout << poly1; 

오류 메시지가 말한다 : 잘못된 바이너리 표현 피연산자 ('ofstream'(일명 'basic_ofstream') 등)

그리고 대한 ('다항식' 특정 기능을 사용해야합니다 : 후보 기능이 실행 가능하지 않습니다 : 두 번째 인수에 l 값이 필요합니다.

감사합니다!

+0

'operator +'는'operator + ='의 관점에서 구현되어야합니다. – chris

+2

음, 오류 메시지가 정확합니다 - 연산자 << const의 두 번째 매개 변수를 만듭니다. –

+1

'operator <<'는'ostream' 인수를 무시하고'print()'가 사용하는 모든 스트림으로 출력합니다. – Oktalist

답변

2

당신이 필요합니다

ostream& operator<< (ostream& out, Polynomial const& poly) { 

임시 객체가 const가 아닌 참조에 바인딩 할 수 없기 때문입니다.

즉, Polynomial::print() 기능을 const으로 설정해야합니다.