(C++) GCC: Keine Kandidaten in Template-Klasse gefunden
Mathias Brodala
- programmiertechnik
Hallo.
Ich arbeite zur Zeit unter Anderem zu Übungszwecken an einer Array-Klasse, welche Objekte jeder Art beherbergen können und nützliche Methoden zur Arbeit damit zur Verfügung stellen soll. Hierzu habe ich Templates genutzt.
Das Problem nun: während mein Beispielcode im VisualStudio problemlos kompiliert und erfolgreich ausgeführt wird, bricht der GCC nur mit einer eher kryptischen Meldung ab:
$ make
g++ -Wall -g main.cpp -o ac
main.cpp: In function ‘int main()’:
main.cpp:43: error: no match for ‘operator=’ in ‘c = Marray<T>::operator+(Marray<T>&) [with T = int](((Marray<int>&)(& b)))’
marray.h:137: note: candidates are: Marray<T>& Marray<T>::operator=(Marray<T>&) [with T = int]
marray.h:160: note: Marray<T>& Marray<T>::operator=(T) [with T = int]
make: *** [ac] Fehler 1
Kann mir jemand dies vielleicht etwas verständlicher erklären?
Hier die Quellcodes zu meiner Klasse und dem Beispielcode. (Makefile, falls erforderlich)
Gruß, Mathias
Moin!
main.cpp: In function ‘int main()’:
main.cpp:43: error: no match for ‘operator=’ in ‘c = Marray<T>::operator+(Marray<T>&) [with T = int](((Marray<int>&)(& b)))’
marray.h:137: note: candidates are: Marray<T>& Marray<T>::operator=(Marray<T>&) [with T = int]
marray.h:160: note: Marray<T>& Marray<T>::operator=(T) [with T = int]
make: *** [ac] Fehler 1Kann mir jemand dies vielleicht etwas verständlicher erklären?
Du versuchst in Zeile 43ff. der Datei `main.cpp´ den „=“-Operator in einer Weise aufzurufen, in der er nicht definiert ist. Die Angabe dahinter „in ‘c = Marray<T>::operator+(Marray<T>&) [with T = int](((Marray<int>&)(& b)))“ stimmt mich etwas verwundert.
Hier die Quellcodes zu meiner Klasse und dem Beispielcode.
Schade:
You don't have permission to access /c++/Marray/main.cpp on this server.
Wenn ich mal in die main.cpp schauen dürfte?
Viele Grüße,
Robert
Hallo Robert.
main.cpp: In function ‘int main()’:
main.cpp:43: error: no match for ‘operator=’ in ‘c = Marray<T>::operator+(Marray<T>&) [with T = int](((Marray<int>&)(& b)))’
marray.h:137: note: candidates are: Marray<T>& Marray<T>::operator=(Marray<T>&) [with T = int]
marray.h:160: note: Marray<T>& Marray<T>::operator=(T) [with T = int]
make: *** [ac] Fehler 1Kann mir jemand dies vielleicht etwas verständlicher erklären?
Du versuchst in Zeile 43ff. der Datei `main.cpp´ den „=“-Operator in einer Weise aufzurufen, in der er nicht definiert ist. Die Angabe dahinter „in ‘c = Marray<T>::operator+(Marray<T>&) [with T = int](((Marray<int>&)(& b)))“ stimmt mich etwas verwundert.
Ja, soweit habe ich dies verstanden. Mein überladener „+“-Operator gibt also offenbar etwas zurück, was mein „=“-Operator nicht erwartet. Doch beides stimmt überein.
Hier die Quellcodes zu meiner Klasse und dem Beispielcode.
Schade:
You don't have permission to access /c++/Marray/main.cpp on this server.Wenn ich mal in die main.cpp schauen dürfte?
Ja, die Berechtigungen habe ich nun korrigiert.
Einen schönen Mittwoch noch.
Gruß, Mathias
Hallo nochmal.
main.cpp: In function ‘int main()’:
main.cpp:43: error: no match for ‘operator=’ in ‘c = Marray<T>::operator+(Marray<T>&) [with T = int](((Marray<int>&)(& b)))’
marray.h:137: note: candidates are: Marray<T>& Marray<T>::operator=(Marray<T>&) [with T = int]
marray.h:160: note: Marray<T>& Marray<T>::operator=(T) [with T = int]
make: *** [ac] Fehler 1Kann mir jemand dies vielleicht etwas verständlicher erklären?
Du versuchst in Zeile 43ff. der Datei `main.cpp´ den „=“-Operator in einer Weise aufzurufen, in der er nicht definiert ist. Die Angabe dahinter „in ‘c = Marray<T>::operator+(Marray<T>&) [with T = int](((Marray<int>&)(& b)))“ stimmt mich etwas verwundert.
Ja, soweit habe ich dies verstanden. Mein überladener „+“-Operator gibt also offenbar etwas zurück, was mein „=“-Operator nicht erwartet. Doch beides stimmt überein.
Schon schön, was ein paar erläuternde Worte doch bewirken können. Nach dem ich nun (1) auf das temporäre Objekt innerhalb von „operator+“ verzichtet habe und (2) statt dessen *this (3) als Referenz zurückgebe, kompiliert es nun auch im GCC problemlos und kann ausgeführt werden. Wie ich gerade getestet habe, läuft es auch noch immer im VisualStudio, das Problem ist also gelöst.
Gestern Abend hat mir obiges Zeichenwirrwarr (ernsthaft) Kopfschmerzen bereitet.
Hier die Quellcodes zu meiner Klasse und dem Beispielcode.
Schade:
You don't have permission to access /c++/Marray/main.cpp on this server.Wenn ich mal in die main.cpp schauen dürfte?
Danke für deine Bemühung.
Einen schönen Mittwoch noch.
Gruß, Mathias
Moin Mathias!
Danke für deine Bemühung.
Keine Ursache. C++ kann manchmal doch wie ein Hamsterbau sein: Man pustet in ein Loch herein und schaut, wo der Hamster herauskommt (Zitat meines damaligen Informatik-Lehrers).
Schönes Wochenende,
Robert
Hallo Robert,
C++ kann manchmal doch wie ein Hamsterbau sein: Man pustet in ein Loch herein und schaut, wo der Hamster herauskommt (Zitat meines damaligen Informatik-Lehrers).
sehr amüsante Vorstellung. ;-)
Aber da ist was dran - genau so kommt mir C++ auch oft vor: Wir probieren mal das hier, und schauen, was dabei rauskommt. Irgendwie habe ich den Eindruck, dass da vieles nicht wirklich logisch nachvollziehbar ist. Da bleibe ich doch lieber bei meinem Plain C (ohne ++) und bilde OO-Ansätze mit geeigneten structs und Zeigern auf Funktionen selbst nach. Dann kann ich wenigstens eindeutig nachvollziehen, was da wirklich passiert.
Schönes Wochenende,
Danke ebenso,
Martin