C++ 错误:没有可行的重载=

C++ 错误:没有可行的重载=,c++,C++,我有一个类似这样的类: 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(): i

我有一个类似这样的类:

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);
我有一些代码将其实例化如下:

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);
您正在使用new运算符在堆上分配一个对象,该运算符返回指向所创建对象的指针,并且您正在尝试将指针分配给一个对象

这里更好的选择是在堆栈上分配对象,您已经在这样做了

MemberListEntry(id,端口)

这将创建并初始化对象,当函数超出范围时,对象将自动销毁

有趣的事实:这不是java,它是C++。p> 希望这有帮助。

您的代码应该是

MemberListEntry * mEntry;
mEntry = new MemberListEntry(id, port);
您正在使用new运算符在堆上分配一个对象,该运算符返回指向所创建对象的指针,并且您正在尝试将指针分配给一个对象

这里更好的选择是在堆栈上分配对象,您已经在这样做了

MemberListEntry(id,端口)

这将创建并初始化对象,当函数超出范围时,对象将自动销毁

有趣的事实:这不是java,它是C++。p>


希望这有帮助。

newmemberlistentry
返回一个
MemberListEntry*
mEntry
是一个普通的
MemberListEntry
newmemberlistentry
返回一个
MemberListEntry*
mEntry
是一个普通的
MemberListEntry
。您可以将指针指定给对象。您需要正确的
运算符=
和正确的原因。是的,因为他没有实现operator=here,所以他不能将指针分配给对象。但是,我更新了我的答案,使之明确。您可以指定指向对象的指针。您需要正确的
运算符=
和正确的原因。是的,因为他没有实现operator=here,所以他不能将指针分配给对象。然而,我更新了我的答案,使之更加明确。