我在 C++ 中为单向链表编写了 operator*。当我在 main 中编写包含什么函数时,它起作用了,但是当我调用该函数时,它不起作用

I wrote operator* for singly linked list in c++. When I write what function contains in main, it works, but when I call the function, it doesn't

Polynomial& Polynomial::operator*(double k) {

    Polynomial result;
    Node<double>*current = first;
    if (!current) {
        throw "Can't do this operation with empty polynomial. /n";

    }
    
    for (int i = 0; i < length(); i++) {
        result.insertAt(i, k*current->info);
        current = current->next;
    }
    return result;
}

// 函数 insertAt() 工作正常。

Polynomial result;

一个名为 result 的局部变量在此函数中定义。像所有其他局部变量一样,当此函数 returns 时,它将被销毁,并且不再存在。这就是局部函数变量在 C++ 中的工作方式。

return result;

此函数声明为 return对对象的引用。此 return 语句 return 是对 result 的引用。然而,由于 returning 来自函数 result 的优点同时被销毁。此函数 return 是对已销毁对象的引用,使用此引用会导致未定义的行为。这是对您所看到的异常行为的解释。

此函数不应 return 引用,而应 return 对象的值。希望 Polynomial 是完整的 Rule Of 3 compliant 并且有一个合适的复制构造函数和一个赋值运算符,这样才能正确发生。

P.S。大多数现代 C++ 编译器都完全能够检测到这个明显的常见错误。如果您的编译器发出诊断消息并警告您,这是一个永远不要忽略来自编译器的警告消息的教训,即使它成功编译了您的程序。您的编译器希望帮助您编写正确的代码。始终验证您的程序编译时没有来自 C++ 编译器的 any 诊断消息。即使程序可以编译,编译器发出的警告消息也往往表明您的代码中存在真正的错误。