Problem bei Vererbung
-
Hi!
Ich würde gerne von Vector erben. Hatte dazu auch hier was geschrieben: http://www.c-plusplus.net/forum/viewtopic-var-t-is-211525.html
Aber jetzt gehört das Thema glaube ich hier hin.
Wenn ich das mache:
#pragma once #include <vector> #include "Edge.h" // zurzeit eine leere Klasse ref class Chart : public std::vector<Edge> { public: Chart(void); };
Dann kommt der Fehler:
error C3699: "*": Diese Referenzierung kann nicht für den Typ "Edge" verwendet werden.
Muss man das anders machen? Wie? Und vor allem: warum?
Grüße, pktm
-
Wie im verlinkten Post erwähnt, eignen sich Container der STL nicht zum vererben (sorry, hätte ich auch mal erwähnen können :)). Darüberhinaus ist Edge vermutlich ein Referenztyp?
Aber wenn Du unter .NET arbeitest, solltest Du ohnehin die .NET Container in System::Collections::Generic vwerdenden.
-
LordJaxom schrieb:
Wie im verlinkten Post erwähnt, eignen sich Container der STL nicht zum vererben (sorry, hätte ich auch mal erwähnen können :)). Darüberhinaus ist Edge vermutlich ein Referenztyp?
Aber wenn Du unter .NET arbeitest, solltest Du ohnehin die .NET Container in System::Collections::Generic vwerdenden.
Ahso, ja dann deklariere ich einfach eine Klassenvariable, und schriebe passende Methoden dazu.
Edge ist eine eigene Klasse. Wieso sollten das Referenzen sein? Ich würde lieber die Objekte komlett als Kopie im Vektor ablegen.
Wieso ist denn System::Collections::Generic besser geeignet als vector?
Grüße, pktm
-
Der Fehlermeldung nach könnte Edge eine ref class sein (wie Chart ja auch). Die sind referenzgezählt (deshalb Referenzen). Das ist ein C++/CLI-Sprachmittel, also das einer .NET-Sprache, und deshalb solltest Du dafür auch die Container des .NET-Frameworks nutzen. (Dass das etwas anderes als Standard C++ ist, weißt Du?)
-
LordJaxom schrieb:
Der Fehlermeldung nach könnte Edge eine ref class sein (wie Chart ja auch). Die sind referenzgezählt (deshalb Referenzen). Das ist ein C++/CLI-Sprachmittel, also das einer .NET-Sprache, und deshalb solltest Du dafür auch die Container des .NET-Frameworks nutzen. (Dass das etwas anderes als Standard C++ ist, weißt Du?)
Aha! Ich hab das ref mal schön rausgenommen, weil ich bei Standard-C++ bleiben wollte
Das muss durch den Assistenten da rein gekommen sein.Jetzt sind es alles normale Klassen und es kommt kein Fehler mehr. Und ich versuche nicht mehr von vector zu erben
-
pktm schrieb:
LordJaxom schrieb:
Der Fehlermeldung nach könnte Edge eine ref class sein (wie Chart ja auch). Die sind referenzgezählt (deshalb Referenzen). Das ist ein C++/CLI-Sprachmittel, also das einer .NET-Sprache, und deshalb solltest Du dafür auch die Container des .NET-Frameworks nutzen. (Dass das etwas anderes als Standard C++ ist, weißt Du?)
Aha! Ich hab das ref mal schön rausgenommen, weil ich bei Standard-C++ bleiben wollte
Das muss durch den Assistenten da rein gekommen sein.Jetzt sind es alles normale Klassen und es kommt kein Fehler mehr. Und ich versuche nicht mehr von vector zu erben
Achja so nebenbei, es gibt nicht nur die Syste::Collection, es gibt auch noch die Headerdatei: <cliext/vector>. Diese beinhaltet die "alte" Vector-Klasse aber für C++/CLI.
Mfg Marc-O
-
pharmacy;
-
pharmacy;