输出运算符没有产生预期的结果

Output operator is not producing expected outcome

我正在实现一个 class 多项式,其私有成员由一个单链表的系数和一个代表最高阶数的整数组成。构造函数接受一个表示多项式系数的向量。这是我对构造函数和输出运算符的实现。

#include <iostream>
#include <vector>

using namespace std;

struct Node{
    Node(int data = 0, Node* next = nullptr) : data(data), next(next) {}
    int data;
    Node* next;
};
class Polynomial{
    friend ostream& operator<<(ostream& os, const Polynomial& p);

    public:
    Polynomial(vector<int> poly){
        Node* temp = co;
        for(int i : poly){
            temp = new Node(i);
            temp = temp->next;
        }
        degree = poly.size() - 1;
    }
    private:
    Node* co;
    int degree;
};
ostream& operator<<(ostream& os, const Polynomial& p){
    Node* temp = p.co;
    int degree = p.degree;
    while(temp != nullptr){
        if(degree == 1){
            os << temp->data << "x" << " ";
        }else if(degree == 0){
            os << temp->data;
        }else{
            os << temp->data << "x^" << degree << " ";
        }
        degree--;
        temp = temp->next;
    }
    return os;
}

当我尝试测试我的代码时,输​​出是 686588744,我假设它指的是内存中的一个位置,而不是预期的结果 17。

int main(){
     Polynomial p1({17});
     cout << p1;
}

谁能指出我的代码哪里出错了?

这个构造函数

Polynomial(vector<int> poly){
    Node* temp = co;
    for(int i : poly){
        temp = new Node(i);
        temp = temp->next;
    }
    degree = poly.size() - 1;
}

无效。实际上它并没有建立一个列表。相反,它会产生大量内存泄漏。

例如,首先分配了一个节点并将其地址分配给指针temp,然后将指针重新分配给存储在数据成员temp->next中的值,该值是一个空指针.所以分配的节点地址丢失了。

此外,指针 co 未初始化。

你可以重写例如下面的方式

Polynomial( const vector<int> &poly) : co( nullptr ), degree( 0 )
{
    Node **current = &co;

    for( int i : poly )
    {
        *current = new Node(i);
        current = &( *current )->next;
    }
     
    if ( not poly.empty() ) degree = poly.size() - 1;
}