错误:没有可行的超载=

Error: No viable overloaded =

本文关键字:超载 错误      更新时间:2023-10-16

我有一个看起来像这样的类:

class MemberListEntry {
public:
    int id;
    short port;
    long heartbeat;
    long timestamp;
    MemberListEntry(int id, short port, long heartbeat, long timestamp);
    MemberListEntry(int id, short port);
    MemberListEntry(): id(0), port(0), heartbeat(0), timestamp(0) {}
    MemberListEntry(const MemberListEntry &anotherMLE);
    MemberListEntry& operator =(const MemberListEntry &anotherMLE);
    int getid();
    short getport();
    long getheartbeat();
    long gettimestamp();
    void setid(int id);
    void setport(short port);
    void setheartbeat(long hearbeat);
    void settimestamp(long timestamp);
};

我有一些代码,可以这样实例化:

   int id = stoi(address.substr(0, pos));
   short port = (short)stoi(address.substr(pos + 1, address.size()-pos-1));
   memcpy(&addr[0], &id, sizeof(int));
   memcpy(&addr[4], &port, sizeof(short));
  MemberListEntry mEntry;
  mEntry = new MemberListEntry(id, port);

我遇到了这个错误:

 error: no viable overloaded '='
 mEntry = new MemberListEntry(id, port);

任何想法是什么原因?

您的代码应为

MemberListEntry * mEntry;
mEntry = new MemberListEntry(id, port);

您使用新操作符在堆上分配一个对象,该新操作员将指针返回到创建的对象,并且您正在尝试将指针分配给对象。

更好的替代方案将是您已经在做的堆栈上分配对象。

MemberListEntry mEntry(id, port);

这会创建并初始化对象,当您的功能范围范围内时,它将自动破坏。

有趣的事实:这不是Java,它是C 。:(

希望这会有所帮助。