Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit einfacher Vererbung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
27.06.2006, 14:48 Uhr
Yadgar



High!


C++:
class ListenElement
{
   // friend class Liste;
  
   private:
      ListenElement* previous;
      ListenElement* next;
   protected:
      ListenElement(ListenElement* p=0, ListenElement* n=0) :
         previous(p), next(n){}
      void Previous(ListenElement *p) { previous=p; )
      ListenElement *Previous(void) { return previous; }
      void Next(ListenElement *n) { next=n; }
      ListenElement *Next(void) { return next; }
              
};

class IntElement:ListenElement // IntElement erbt von ListenElement!
{
   private:       // standardmäßig sind alle Attribute der Basisklasse in der
                  // abgeleiteten Klasse private!
      int data;
   public:
      IntElement(int, ListenElement*, ListenElement*);  // Konstruktor
};



Obwohl die Klasse ListenElement vollständig definiert ist, zeigt mir mein Compiler ständig die Fehlermeldung "invalid use of undefined type `class ListenElement' " an! Wieso?
(die vollständige Implementation des Konstruktors für IntElement ist im Original-Listing enthalten, hier aus Platzgründen weggelassen)

Bis bald im Khyberspace!

Yadgar
Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.06.2006, 14:55 Uhr
mike
Pinguinhüpfer
(Operator)


class IntElement: public ListenElement

lg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.06.2006, 15:12 Uhr
Yadgar



High!


Zitat von mike:
class IntElement: public ListenElement

lg


Das leuchtet mir ein... "protected ListenElement" wäre wahrscheindlich auch möglich, oder?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.06.2006, 15:14 Uhr
Yadgar



High!


Zitat von mike:
class IntElement: public ListenElement

lg


(zwei Minuten später)

Das funktionier leider auch nicht, weder mit protected, noch mit public!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.06.2006, 15:19 Uhr
ao

(Operator)



C++:
      void Previous(ListenElement *p) { previous=p; )


Diese Zeile mit '}' abschließen, nicht mit ')'. Dann gehts.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.06.2006, 15:27 Uhr
Yadgar



High!


Zitat von ao:

C++:
      void Previous(ListenElement *p) { previous=p; )


Diese Zeile mit '}' abschließen, nicht mit ')'. Dann gehts.

ao


Das hat soweit funktioniert, jetzt lauert der nächste Error:
`ListenElement::ListenElement(ListenElement*, ListenElement*)' is protected
(bezieht sich auf eine Zeile in der main-Funktion, wo ich ein Objekt vom Typ ListenElement deklariere)... kann es sein, dass ich einfach zu dumm für C++ bin und besser Spargel stechen sollte?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.06.2006, 16:00 Uhr
ao

(Operator)



Zitat von Yadgar:
kann es sein, dass ich einfach zu dumm für C++ bin und besser Spargel stechen sollte?

Ausgeschlossen ist das nicht, wahrscheinlicher ist aber Unerfahrenheit.

Der Konstruktor von ListenElement ist protected, d.h. ListenElement kann nicht direkt instanziert werden, sondern kann nur als Basisklasse für andere Klassen dienen.

Erzeugen kannst du deiner Klassenhierarchie nach nur Objekte vom Typ IntElement.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.06.2006, 23:06 Uhr
Yadgar




Zitat von ao:

Der Konstruktor von ListenElement ist protected, d.h. ListenElement kann nicht direkt instanziert werden, sondern kann nur als Basisklasse für andere Klassen dienen.

Erzeugen kannst du deiner Klassenhierarchie nach nur Objekte vom Typ IntElement.



Mit anderen Worten, wenn der Konstruktor public wäre, würde es funktionieren?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.06.2006, 08:50 Uhr
ao

(Operator)



Zitat von Yadgar:
Mit anderen Worten, wenn der Konstruktor public wäre, würde es funktionieren?

Ja, aber vielleicht hast du dir ja was dabei gedacht, als du ihn protected gemacht hast.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
28.06.2006, 09:28 Uhr
(un)wissender
Niveauwart


Unwahrscheinlich .
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: