c++ - 带有运算符的简单用户定义类 = 重载代码崩溃

标签 c++ overloading operator-keyword

我正在测试一个简单的运算符重载代码,在测试时,这段代码在“nd.print()”处崩溃(核心转储)。有什么建议吗?

崩溃发生在 ubuntu 16.04 64 位上。当我在网上试了一些shell环境,比如https://www.onlinegdb.com/online_c++_compiler , 看起来还可以。

#include <iostream>
using namespace std;

class Node
{
    int d;
    public:
    Node (int dd = 0):d(dd){}
    Node &operator=(Node &nd){ d = nd.d; }
    void print(){ cout<<d<<endl; }
};

int main()
{
    Node nd1(1), nd2(2);
    Node nd;
    nd = nd2 = nd1;
    nd.print();    //*******Crash here
    return 0;
}

我希望它只打印一个值而不会崩溃。

最佳答案

operator= 方法需要返回赋值的变量。事实上,它没有返回任何东西(虽然签名说你会 - 你可能有一个关于它的编译器警告),所以 nd = ... 位正在分配一个未定义的值。然后,您尝试对该未定义的值调用 print 方法。

在这种情况下,您想要返回分配的值,即*this:

Node &operator=(Node &nd)
{
    d = nd.d;
    return *this;
}

关于c++ - 带有运算符的简单用户定义类 = 重载代码崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55505226/

相关文章:

c++ - 清除结构,它是 C++ 中类的成员

c++ - 12天的圣诞节C程序

c++ - 有与 cudaHostGetDevicePointer() 相反的东西吗?

python - Python中一个类中具有相同名称的方法

c++ - 重载+添加两个指针

java - 方法重载不明确

c# List.Exists 返回 true "false && true"

python - 如何让 itemgetter 从列表变量中获取输入?

c++ - QT:没有百分比编码的 QUrl

CLA 认证考试中 C 运算符(operator)优先