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


Anmelden zum Antworten