【问题标题】:Invalid operands of types class pointer and class pointer to binary operator+类指针和二元运算符的类指针类型的无效操作数+
【发布时间】:2017-09-04 22:47:06
【问题描述】:

我正在尝试重载 + 运算符,以便它需要两个类。在每个名为 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;
}

尝试使用我的操作员时,我正在执行以下操作: 新多边形 = 主 + 秒; 其中所有变量都是单独的初始化多项式。 关于我做错了什么有什么想法吗?

【问题讨论】:

    标签: c++ class operator-overloading operators


    【解决方案1】:

    从您的错误消息看来,您正试图在指向Polynomials 的两个指针上使用运算符。如果是这种情况,您应该首先使用* 取消引用指针。

    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);
    

    【讨论】:

      【解决方案2】:

      因为在运算符重载中构造temp时使用了new运算符,所以变量temp不是Polynomial类型,而是Polynomial*类型。

      但是,您的运算符重载被声明为返回 Polynomial 类型。您需要重新声明运算符重载以返回 Polynomial*,或者在返回时取消引用 temp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-11
        • 2020-02-28
        • 2016-06-28
        • 1970-01-01
        • 1970-01-01
        • 2014-01-26
        • 2017-09-19
        • 1970-01-01
        相关资源
        最近更新 更多