1. ホーム
  2. c++

[解決済み] エラーです。実行可能なオーバーロードがありません =。

2022-02-17 01:07:14

質問

次のようなクラスがあります。

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 mEntry(id, port);

これはオブジェクトの作成と初期化を行い、関数がスコープ外に出たときに自動的に破棄されます。

面白いことに、これはJavaではなくC++です。)

お役に立てれば幸いです。