2017-04-10 11 views
0

+ 연산자를 오버로드하여 두 클래스를 사용하려고합니다. Polynomial이라는 각 클래스 안에는 polyStruct라는 구조체가 있습니다.이 구조체에는 데이터를 추가하고 그 합계를 다시 전달합니다. 그러나 나는 운이 없다.형식의 잘못된 피연산자 클래스 포인터 및 이진 연산자에 대한 포인터 포인터 +

전체 오류 : 오류 : 여기

class Polynomial { 
public: 
    Polynomial(); 
    Polynomial(ifstream *data); 
    Polynomial* copyPolynomial(); 

    Polynomial* add(Polynomial *sec); 
    Polynomial operator+(const Polynomial& sec); 
    Polynomial* subtract(Polynomial *sec); 
    //poly operator-(const poly&); 

    bool equalPoly(Polynomial *sec); 

    double evaluate(int x); 

    int getDegree(); 
    void print(); 


private: 
    struct poly { 
     int exp; 
     double coeff; 
    } *polyStruct; 

    List polyList; 

}; 

내 운영자 과부하입니다 : "* 다항식"유형의 유효하지 않은 피연산자와 이진 "연산자 +"에서 "다항식 *"여기

내 클래스 :

Polynomial Polynomial::operator+(const Polynomial& sec) { 
Polynomial temp = new Polynomial(); 

temp.polyStruct->exp = polyStruct->exp; 
temp.polyStruct->coeff = polyStruct->coeff + sec.polyStruct->coeff; 

return temp; 
} 

나는 다음과 같은 일을 오전 내 OPERATOR 시스템 사용하기 : newPoly = 주 + 초를; 여기서 모든 변수는 개별 초기화 된 다항식입니다. 무엇이 잘못하고 있는지에 대한 아이디어가 있습니까?

답변

0

오류 메시지에서 Polynomial에 대한 두 개의 포인터에서 연산자를 사용하는 것으로 나타납니다. 이 경우 먼저 * 포인터를 역 참조해야합니다. 운영자 과부하 내부 temp을 구성 할 때 new 연산자를 사용했기 때문에

class Polynomial { 
public: 
    Polynomial* operator+(const Polynomial& sec); 
}; 

Polynomial* Polynomial::operator+(const Polynomial& sec) { 
    Polynomial* temp = new Polynomial(); 

    temp->polyStruct->exp = polyStruct->exp; 
    temp->polyStruct->coeff = polyStruct->coeff + sec.polyStruct->coeff; 

    return temp; 
} 

Polynomial* polynomial1 = new Polynomial(); 
Polynomial* polynomial2 = new Polynomial(); 
Polynomial* polynomial3 = (*polynomial1) + (*polynomial2); 
0

는 변수 tempPolynomial 유형,하지만 Polynomial* 형식이 아닙니다.

그러나 연산자 오버로드는 Polynomial 유형을 반환하도록 선언되었습니다. 대신에 연산자 오버로드를 다시 선언하여 Polynomial*을 반환하거나 반환 할 때 temp을 참조 해제해야합니다.