2017-05-05 3 views
-1

Ich habe eine Klasse, die wie folgt aussieht:Fehler: Keine tragfähige überlastet =

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

Die ich einen Code haben, der es wie folgt instanziiert:

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

Ich erhalte diese Fehlermeldung:

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

Irgendeine Idee, was die Ursache des Problems sein könnte?

+1

'new MemberListEntry' gibt einen' MemberListEntry * 'zurück; 'mEntry' ist ein gewöhnlicher' MemberListEntry'. – nrussell

Antwort

5

sollte Ihr Code sein

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

Sie ein Objekt auf Haufen mit neuen Betreiber Zuteilung, die erstellt Zeiger auf das Objekt zurückgibt und Sie versuchen, einen Zeiger auf ein Objekt zuweisen.

Bessere Alternative hier würde Objekt auf Stapel zuweisen, die Sie es bereits tun.

MemberListEntry mEntry(id, port);

Dies erzeugt und initialisiert das Objekt und es wird automatisch zerstört werden, wenn Ihre Funktion den Gültigkeitsbereich verlässt.

Fun Tatsache: Dies ist nicht Java, es ist C++. :)

Hoffe das hilft.

+0

Sie * können * einen Zeiger auf ein Objekt zuweisen. Sie brauchen den richtigen Operator = 'und den richtigen Grund. Keine davon existiert hier. –

+0

Ja, da er operator = hier nicht implementiert, kann er keinen Zeiger auf ein Objekt zuweisen. Allerdings habe ich meine Antwort aktualisiert, um explizit zu sein. – Abhishek

Verwandte Themen