falscher operator aufruf
-
struct A { void f(int,int); }; struct B : A { void f(int); }; void foo() { B b; b.f(1,1); }gleiche Konstellation. Natürlich kann die Überladung in B nicht genutzt werden, weil die Parameteranzahl nicht stimmt. Trotzdem wird die Basisklasse nicht durchsucht, denn die bloße Suche nach dem Namen f ist bereits erfolgreich gewesen. Nur sind eben alle gefunden Überladungen in B unbrauchbar und der Compiler quittiert es mit einem Fehler. In deinem Falle gibt es dann aber noch die Alternative des eingebauten Operators, deswegen bekommst du nichts zu sehen.
-
Tja, wieder was gelernt.
Mal ne andere Frage: Wieso deklarierst Du du Deine Vererbung da als virtual? Das macht doch nur bei Mehrfachvererbung Sinn, oder?
-
na ich wusste nicht genau ob sich das überträgt, wenn ich später vllt mal ne klasse habe die von cmatrix und cvertex erbt. also
class T1 {}; class T2 : public T1 {}; class T3 : public T2, public T1 {};da wusste ich jetzt nicht ob es ausreicht bei T3 einfach virtual davor zu schreiben ober ob das bei T2 schon hin muss, und da hab ich es sicherheitshalber schon bei T2 gemacht.
mal abgesehen davon weiß ich auch gar nicht genau welche klasse da priorität hat, da ja doch einige operatoren/methoden 'gleich' sind.
-
jetzt würde ich aber trotzdem noch gern wissen, wie ich mein ursprüngliches problem lösen kann ohne meinen halber code ändern zu müssen :D.
PS: zum thema mal wieder was gelernt, kann ich nur sagen das ich öfters für solche sachen sorge und jedesmal lerne ich durch die angeregten diskussionen und engagierten helfer sehr viel dazu

-
FreakyBKA schrieb:
jetzt würde ich aber trotzdem noch gern wissen, wie ich mein ursprüngliches problem lösen kann ohne meinen halber code ändern zu müssen :D.
using-Deklaration in cvertex s.o.
-
wo muss das hin? in dem zusammenhand hab ich das using noch nicht verwendet ...
-
einfach in die Klassendefinition von cvertex einfügen. Ist eine Deklaration wie jede andere.
-
wunderbar funktioniert.
also vielen dank an die, die sich so tatkräftig beteiligt haben. immer wieder eine freude mit so fachkundigen leuten zusammenzuarbeiten
-
achso, kann mir trotzdem nochmal wer sagen wie das jetz mit dem virtual ist?
-
FreakyBKA schrieb:
achso, kann mir trotzdem nochmal wer sagen wie das jetz mit dem virtual ist?
die virtuelle Vererbung macht nur Sinn, wenn deine Basisklasse (cmatrix<>) mehrfach in der Hierarchie zusammengeführt werden könnte - d.h. wenn du irgendwann mal vorhaben solltest, eine Klasse von mehreren cmatrix-Nachkommen abzuleiten.
(damit sicherst du, daß alle Nachkommen genau eine Version der cmatrix-Member bekommen werden (was natürlich auch wieder ausgehebelt werden kann, wenn du nicht aufpasst))
-
wie kann das denn ausgehebelt werden, wenn alle zwischenstationen in der hierarchie virtual-abgeleitet sind?
-
Wenn du das wirklich konsequent durchhältst, herzlich Glückwunsch - aber du kannst nicht davon ausgehen, daß auch die LEute, die deine Klassen später benutzen wollen, so konsequent sind.
-
dann liegt es aber nicht an mir, bis zum dem was ich an klasse schreibe wäre es ja dann problemlos, auf alles spätere kann man sowieso nicht einwirken.
-
Andererseits: Hast du wirklich irgendwann vor, mehrere CMatrix<>-Nachkommen zusammenzufassen (und zwar Nachkommen der selben Spezialisierung)? Wenn ja, würde ich eher das Design überdenken anstatt prophylaktisch überall 'virtual' davorzuschreiben.
-
stimmt eigentlich, also meinste ich sollte das mit dem virtual lieber weglassen?