2017-05-05 71 views
-1

我有一個類,它看起來像這樣:錯誤:沒有可行的重載=

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); 

任何想法可能是什麼原因的問題?

+1

'new MemberListEntry'返回'MemberListEntry *'; 'mEntry'是一個普通的'MemberListEntry'。 – nrussell

回答

5

你的代碼應該是

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

您正在使用新的運營商,它返回指針創建的對象分配的堆的對象,你想一個指針賦給一個對象。

更好的替代方案是在堆棧上分配對象,而你已經在做它了。

MemberListEntry mEntry(id, port);

它用來創建和初始化對象,當你的函數超出範圍時它會自動銷燬。

有趣的事實:這不是Java,它是C++。 :)

希望這會有所幫助。

+0

你*可以*指定一個對象的指針。你需要正確的'operator ='和正確的理由。這兩者都不存在。 –

+0

是的,因爲他沒有實現operator = here,所以他不能將指針指定給對象。但是,我更新了我的答案,以便明確。 – Abhishek

相關問題