Clo*_*Guy 0 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;
}
Run Code Online (Sandbox Code Playgroud)
我希望它只是打印一个值而不会崩溃。
该operator=方法需要返回分配的变量。照原样,它不返回任何内容(尽管签名说明您将-可能会有编译器警告),所以该nd = ...位分配了一个未定义的值。然后,您尝试print在该未定义值上调用该方法。
在这种情况下,您要返回分配的值,即*this:
Node &operator=(Node &nd)
{
d = nd.d;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29 次 |
| 最近记录: |