Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

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

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 <
000
04.03.2014, 18:40 Uhr
~Sam94
Gast


Hi,
ich habe versucht eine verkettete Liste zu schreiben und eine sortierende Liste von ihr abzuleiten.
Jedoch erhalte ich den Fehler "class "PriorityList<Scene>" hat keinen Member "add". ", was doch bedeutet, dass die Methode add nicht vererbt wurde, oder?

Hier wird die PriorityList initialisiert und bei add wird der Fehler angezeigt:

C++:
PriorityList<Scene>* scenes = new PriorityList<Scene>();

void addScene(Scene* scene) {
    scenes->add(scene);
}



Hier wird add für List als public definiert:

C++:
template <class T>
class List {
    public:    
        void add(T* elem);



Hier erbt PriorityList von List:

C++:
template <class T>
class PriorityList: class List<T> {
};



Und hier wird die Methode add sogar noch überschrieben:

C++:
template <class T>        
void PriorityList<T>::add(T* elem) {
    first = first->addSorted(elem);
}



Könnt ihr mir bitte sagen, wo der Fehler liegt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.03.2014, 08:52 Uhr
Tommix



Hallo,
Dein Code ist ein bisschen aus dem Zusammenhang gerissen, aber im Wesentlichen läuft es wohl auf die Vererbung hinaus:


C++:
template <class T>
class PriorityList: public List<T> {
public:
    void add(T* elem);
};



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.03.2014, 12:07 Uhr
~Sam94
Gast


Danke für die schnelle Hilfe
Ich habe erst kürzlich mit c++ angefangen und wohl die Syntax falsch im Kopf gehabt ^^

Allerdings habe ich jetzt leider ein anderes Problem:
Ich erhalte beim Überschreiben der Funktionen folgende Fehler:

Code:
------ Erstellen gestartet: Projekt: Game, Konfiguration: Debug Win32 ------
1>  linkedList.cpp
linkedlist.cpp(119): error C2995: "bool End<T>::equals(T *)": Funktionsvorlage wurde bereits definiert.
linkedlist.h(19): Siehe Deklaration von 'End<T>::equals'

linkedlist.cpp(124): error C2995: "bool End<T>::equals(std::string *)": Funktionsvorlage wurde bereits definiert.
linkedlist.h(20): Siehe Deklaration von 'End<T>::equals'

linkedlist.cpp(130): error C2995: "End<T> *End<T>::add(T *)": Funktionsvorlage wurde bereits definiert.
linkedlist.h(12): Siehe Deklaration von 'End<T>::add'

linkedlist.cpp(135): error C2995: "End<T> *End<T>::addSorted(T *)": Funktionsvorlage wurde bereits definiert.
linkedlist.h(13): Siehe Deklaration von 'End<T>::addSorted'

linkedlist.cpp(140): error C2995: "End<T> *End<T>::search(T *)": Funktionsvorlage wurde bereits definiert.
linkedlist.h(14): Siehe Deklaration von 'End<T>::search'

linkedlist.cpp(145): error C2995: "End<T> *End<T>::search(std::string *)": Funktionsvorlage wurde bereits definiert.
linkedlist.h(15): Siehe Deklaration von 'End<T>::search'

linkedlist.cpp(150): error C2995: "End<T> *End<T>::remove(T *)": Funktionsvorlage wurde bereits definiert.
linkedlist.h(16): Siehe Deklaration von 'End<T>::remove'

linkedlist.cpp(156): error C2995: "void List<T>::add(T *)": Funktionsvorlage wurde bereits definiert.
linkedlist.h(44): Siehe Deklaration von 'List<T>::add'



Mein Quellcode sieht wie fogt aus:

linkedlist.h

C++:
...
template <class T>
class End {
    public:
        End() {}
        ~End() {}
        
        virtual End<T>* add(T* elem); //Z12
         virtual End<T>* addSorted(T* elem);
        virtual End<T>* search(T* elem);
        virtual End<T>* search(std::string* name);
        virtual End<T>* remove(T* elem);
        virtual End<T>* remove(std::string* elem);
        virtual End<T>* getNext() {return 0;}
        virtual bool equals(T* elem) {return false;}
        virtual bool equals(std::string* name) {return false;}

};

template <class T>
class Node : public End<T> {
    public:
        Node(T* elem, End<T>* next);
        ~Node();
        
        T* getElem() { return elem;}
        End<T>* getNext() { return next;}

    protected:
        End<T>* next;
        T* elem;
};
...
template <class T>
class List {
    public:
        ...
        virtual void add(T* elem); //Z44
        ...
};

template <class T>
class PriorityList: public List<T> {
};

template <class T>
class Stack: public List<T> {
};



linkedlist.cpp

C++:
template <class T>        
bool Node<T>::equals(T* elem) {
    return *(this->elem) == *elem;
} // Z119

template <class T>        
bool Node<T>::equals(string* elem) {
    return *(this->elem) == *elem;
} //Z124

// End
template <class T>
End<T>* End<T>::add(T* elem){
    return new Node<T>(elem, this);
}  //Z130

template <class T>
End<T>* End<T>::addSorted(T* elem){
    return new Node<T>(elem, this);
} //Z135

template <class T>
End<T>* End<T>::search(T* elem) {
    return 0;
} //Z140

template <class T>
End<T>* End<T>::search(string* name) {
    return 0;
} //Z145

template <class T>
End<T>* End<T>::remove(T* elem) {
    return 0;
} //Z150

// PriorityList
template <class T>        
void PriorityList<T>::add(T* elem) {
    first = first->addSorted(elem);
} //Z156

// Stack
template <class T>        
void Stack<T>::add(T* elem) {
    first = new Node<T>(elem, first);
}



Interessant ist dabei auch, dass bei PriorityList ein Fehler ausgegeben wird, aber bei Stack nicht, obwohl beides gleich aufgebaut ist?!
Für erneute Hilfe wäre ich sehr dankbar
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.03.2014, 14:10 Uhr
Tommix



Die Funktionen die Du überschreibst, müssen auch in die Klassendeklaration:

C++:
template <class T>
class Node : public End<T> {
    public:
        Node(T* elem, End<T>* next);
        ~Node();
        
        T* getElem() { return elem;}
        End<T>* getNext() { return next;}

        virtual bool equals(T* elem);
        virtual bool equals(std::string* name);
        //  usw.

    protected:
        End<T>* next;
        T* elem;
};



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: