Member Variable einer abstrakten Klasse in abgeleiteter Klasse nicht deklariert?

F

freekguy

Mitglied
Thread Starter
Dabei seit
11.02.2009
Beiträge
73
Reaktionspunkte
16
Guten Morgen zusammen. Ich hab ein recht nerviges Problem mit dem folgendem Codeschnipsel. Hierbei gibt mir XCode an der Stelle
Code:
void vAusfuehren() { p_ptLazyListe->push_front(p_tObjekt);}
"p_ptLazyListe was not declared in this scope" aus.
Allerdings passiert dies in Visual Studio 2008 nicht. Die Frage ist nun, habe ich einen Denkfehler bei der Programmierung begangen oder ist eine Einstellung in XCode nicht richtig?

Ich bin für jede Hilfe dankbar, denn mir wachsen schon langsam graue Haare.

Code:
#include <list>
using namespace std;

// Oberklasse LazyAktion
template <class T>
class LazyAktion
{
   public:
      LazyAktion( list<T>* ptLazyListe ) : p_ptLazyListe( ptLazyListe ) {}
      virtual ~LazyAktion() {}
      virtual void vAusfuehren() = 0;
   protected:
	  list<T>*	p_ptLazyListe;	// Zeiger auf p_ListeObjekte
};


// LazyPushFront
template <class T>
class LazyPushFront : public LazyAktion<T>
{
   public:
      LazyPushFront(const T& einObjekt, list<T>* eineListe) : LazyAktion<T>(eineListe), p_tObjekt(einObjekt) {}
      virtual ~LazyPushFront() {}
      void vAusfuehren() { p_ptLazyListe->push_front(p_tObjekt); }
   private:
      T	p_tObjekt;
};
 
http://www.willemer.de/informatik/cpp/cpperben.htm

etwa auf halber höhe....

Edit: Ich finde zugriffe auf Felder einer Superklasse nicht gerade sauber. Bei komplexem Code kann das zu Verwirrung führen ("Wo kommt denn jetzt dieser hier nicht deklarierte Member her"). Schließlich kann gerade bei C++ die Vererbung sehr komplex werden.

Edit 2: Dein Stichwort ist hier das Schlüsselwort "using" im Deklarationsbereich.
 
Zuletzt bearbeitet:
Guten Morgen und vielen Dank. Ich habe mir jetzt mit einem "LazyAktion<T>::p_ptLazyListe" beholfen.
 
Zurück
Oben Unten