klassen in sdt::vector
-
hi
class muster { // inhalt virtual void show(); }; class myclass1 : muster { // inahlt show(); }; class myclass2 : muster { // inahlt show(); };
jetzt möchte myclass1 und myclass2 und weitere dieses types in einen vector ablegen und der reihe nach show(); darstellen .. kann mir bitte einer zeigen wie das geht?
-
vector<muster*> v; v.push_back(new myclass1); v.push_back(new myclass2); ... foreach i in v i->show(); ... foreach i in v delete i;
-
vielen lieben dank
-
so habe mal ausprobiert.
stosse da leider auf problemezum einen kenne ich foreach nur aus php und c# glaub hat das .. mein vc6 kennt es nicht. ich würds aber gerne nutzen, da ichs aus php gewohnt bin.
gibts irgend nen trick es nutzen zu können?zum anderen habe ich nen problem mit den classen
error C2243: 'type cast' : Konvertierung von 'class myclass1 *' zu 'class muster *const ' existiert bereits, aber es ist kein Zugriff darauf moeglichhier meine orginal klassen:
Button.h
#ifndef _BUTTON_ #define _BUTTON_ class Button { private: virtual void OnDestroy(); public: virtual bool OnShow(); Button(); virtual ~Button() { OnDestroy(); } }; #endif
myclass1
#ifndef _BUTTON1_ #define _BUTTON1_ #include "Button.h" class Button1 : Button { private: void OnDestroy(); public: bool OnShow(); Button1 (); ~Button1 () { OnDestroy(); } }; #endif
vector<Button *> buttons; buttons.push_back(new Button1); // error: 2243
Ich möchte also mit Hilfe einer Basisklasse, abgeleitete Klassen bilden.
Die ich dann der Reihe nach darstellen möchte.Man könnts auch anders sagen .. Ich habe einen Basisbutton und möchte jetzt von diesem abgeleitet neue Buttons erstellen und per vector durchgehen und darstellen.
wäre nett wenn einer mir mit dem foreach und dem error helfen würde .. *wink*
-
knauf schrieb:
so habe mal ausprobiert.
zum einen kenne ich foreach nur aus php und c# glaub hat das .. mein vc6 kennt es nicht. ich würds aber gerne nutzen, da ichs aus php gewohnt bin.
gibts irgend nen trick es nutzen zu können?for(vector<Button*>::ierator i=buttos.begin();i!=buttons.end();++i) i->tuwas();
ich war zu faul, das alles zu schreibseln.
knauf schrieb:
error C2243: 'type cast' : Konvertierung von 'class myclass1 *' zu 'class muster *const ' existiert bereits, aber es ist kein Zugriff darauf moeglich
class Button1 : public Button
du hattes aus versehen private geerbt. dann ist die konvertierung zwar da, aber halt private und du darfst sie nicht von außerhalb der klasse benutzen.
-
wau! das ging ja schneller eils eilexpress
*gegen kopf klatsch* argh, vergessen es public zu setzen .. ich glaub auf sowas simples wäre ich nicht in 100jahren gekommen .. danke!
hehe, die for sieht witzig aus .. noch nie mit iteratoren gearbeitet, aber ich verstehe den code
.. danke für deine super fixe antwort
achja, falls wer doch noch irgendwie weiss wie man das foreach in c++ nutzen kann wäre ich echt dankbar.
für array durchläufe macht sich das nämlich wirklich gut und einfach.*wink*
-
knauf schrieb:
in c++ nutzen kann wäre ich echt dankbar.
*wink*Ich glaube gehört zu haben das Boost das kann:
www.boost.orgMfG Max
-
wenn ja konnt ich leider nichts finden
-
knauf schrieb:
wenn ja konnt ich leider nichts finden
Such mal nach foreach und Eeric niebler
In Standard-C++ geht das so:
for(vector<Button*>::ierator i=buttos.begin();i!=buttons.end();++i) i->tuwas();
->
std::for_each(buttons.begin(), buttons.end(), std::mem_fun(&Button::tuwas));
Und zum Löschen:
// Ein nützliches kleines Funktionsobjekt, dass man immer wieder // gebrauchen kann struct DeleteObject { template<typename T> void operator()(const T* ptr) const { delete ptr; } }; std::for_each(buttons.begin(), buttons.end(), DeleteObject());