QT Objekt als Rückgabewert

Gast #2782884
Lesenswert?

Hallo,

ich programmiere gerade C++ unter QT und habe ein Problem damit ein 
Objekt (einer eigenen Klasse) zurückzugeben.
Ich möchte später die Statische Methode accquireTemperature 
folgendermaßen aufrufen können:
1
Message xyz123 = Message::accquireTemperature(123);

Doch der Compiler (gcc, QT 4.7.3 unter Linux) meckert beim returnwert 
der Methode dass er den Copyconstructor (?) nicht findet, obwohl ich 
diesen implementiert habe:

no matching function for call to 'Message::Message(Message&)'

Was habe ich hier falsch gemacht?

Danke!!

1
class Message {
2
public:
3
    explicit Message(const Message & cpy);
4
    explicit Message(Message & cpy);
5
    explicit Message(quint32 mac);
6
    virtual ~Message();
7
public:
8
    static Message accquireTemperature(quint32 mac);
9
public:
10
    QByteArray message;
11
};
1
Message::Message(const Message & cpy) {
2
    message = cpy.message;
3
}
4

5
Message::Message(Message & cpy) {
6
    message = cpy.message;
7
}
8

9
Message::Message(quint32 mac) {
10
    // .....
11
}
12
Message Message::accquireTemperature(quint32 mac) {
13
    Message a(mac);
14
    return(a);
15
}
#2783060
Lesenswert?

explizite Copyconstrukturen machen imho auch nicht so viel Sinn.
Bei anderen ctors macht man das, damit der Compiler nicht auf die Idee 
kommt, bei Fehler wie:
1
Message msg;
2
int msgCnt =0;
3

4
msg  = 4; // statt msgCount  msg benutzt
den Message(int) Ctor zu callen

Ich frag mich auch, wozu der copy-ctors  mit dem nicht-const-Objekt da 
sein soll.
Gast #2783077
Lesenswert?

ich schrieb:
> wenn du das explicit vor dem Copyconstructor entfernst, sollte es
> funktionieren

Ja funktioniert, vielen Dank!

Vlad Tepesch schrieb:
> explizite Copyconstrukturen machen imho auch nicht so viel Sinn

Der QT Creator baut dies automatisch davor wenn man eine Klasse erzeugen 
lässt und so habe ich dass dann auch übernommen.

Vlad Tepesch schrieb:
> Ich frag mich auch, wozu der copy-ctors  mit dem nicht-const-Objekt da
> sein soll.

Hatte ich versuchsweise eingebaut und bereits wieder entfernt. Vielen 
Dank für den Hinweis

Mfg,
Mike

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren