Zeiger von Objekten in vector abspeichern und dann die Methoden aufrufen
-
Hi
Mein Quellcode sieht stark vereinfacht folgendermassen aus:
class CPluginIO { public: void classLoader(string className) { CPluginIO *plug= NULL; if (className == "SysInfo") plug=new PSysInfo(); if (className == "ScreenSaver") plug=new PScreenSaver(); m_zgrPlugin.push_back(plug); vector<CPluginIO*>::iterator it; for(it=m_zgrPlugin.begin(); it!=m_zgrPlugin.end(); ++it) it->printOnLCD(); } virtual void printOnLCD() { cout << "PluginIO" << endl; }; private: vector<CPluginIO*> m_zgrPlugin; }; class PSysInfo : public CPluginIO { public: void printOnLCD() { cout "SysInfo" << endl; } }; class PScreenSaver : public CPluginIO { public: void printOnLCD() { cout "ScreenSaver" << endl; } };
Jetzt will ich die Zeiger der erstellten Objekte in dem vector m_zgrPlugin speichern.
Und anschließend durch die Zeiger gehen und dann vom Objekt die Methode printOnLCD() aufrufen.
Leider verweigert der Compilier das schon beim compilieren.
Seine Fehlermeldung lautet:
src/plugins/pluginio.cpp:52: error: request for member `printOnLCD' in `
(&it)->__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator->
[with _Iterator = CPluginIO, _Container = std::vector<CPluginIO*,
std::allocator<CPluginIO*> >]()', which is of non-aggregate type `CPluginIO*
'
*
Anscheinend kann er die Methode nicht aufrufen nur wie mach ich das richtig sag jetzt schonmal danke für die Antworten.MFG
xmarvek
-
Hallo,
ich denke so sollte es gehen:
(*it)->printOnLCD();
-
danke für die schnelle Antwort jetzt klappt es nur wieso ?
Was ist denn der Unterschied zwischen der Schreibweise *it->printOnLCD und der (*it)->printOnLCD ?
-
der * operator hat ne kleinere priorität als der -> operator