[C++] Problem bei der Vererbung einer Template Klasse

ThorThor

Grünschnabel
Hallo an alle,

Ich habe momentan ein kleines Problem bei der Vererbung einer Template Klasse.
Ich versuche eine abstrakte Template Klasse an eine weiter Template Klasse zu vererben,
aber ich kriege bei jedem Versuch die gleichen 3 Fehlermeldungen.

Ich hab die Klassen in einzelnen Dateien gespeichert und bisher sieht es wie folgt aus:

C++:
//Knoten.h

#include <iostream>

using namespace std;

template <class T> Knoten
{
    public:
        // Alle Funktionen pure virtual
};

Hier die Klass an die Knoten vererbt wird:
C++:
//An_Knoten.h

#include <iostream>
#include "Knoten.h"

template <class T> An_Knoten : virtual public Knoten<T>
{
    // ... Eigenschaften und Fúnktionen
};

Die Fehlermeldungen die ich bekomme sind:
Code:
    error: expected template-name before '<' token
    error: expected '{' before '<' token
    error: expected unqualified-id before '<' token

Ich habe schon versucht verschiedene Sachen zu ändern in dem ich "public" oder "virtual" oder beides weglasse,
aber alles führt zum gleichen Ergebniss.

Ich hoffe es kann mir einer von euch Helfen :)
 
In welcher Datei kommen die Fehler?

Auf jeden Fall fehlt "class" vor dem Klassenname in beiden Dateien:
C++:
template <class T> class Knoten
{
    public:
        // Alle Funktionen pure virtual
};
 
Upps, das war ein Fehler bei der übertragung.
Im Original Code steht bei beiden klassen class vor dem Klassennamen.
Der Fehler wird bei der Datei An_Knoten.h ausgegeben.
 
Das Vererben hast du alles richtig gemacht, der Fehler liegt woanders. Anscheinend kennt der Compiler die class Knoten bei der Vererbung nicht. Ich habe dein Beispiel kopiert, bei mir funktioniert es (habe halt noch eine .cpp-Datei gemacht um die Header dann zu inkludieren).
Also schau mal nach, wo du die Header inkludierst usw. dein geposteter Code funktioniert jedenfalls.

Ach ja: using namespace's solltest du in einer header-Datei nicht verwenden, da sie sich ja auf die cpp-Datei auswirken in die du den Header dann einbindest und das ist schlecht.

Including-Guards verwendest du ja bei den Headern oder?


EDIT: Könnte es vielleicht sein, dass du in Knoten.h versehentlich An_Knoten.h inkludierst?
 
Zuletzt bearbeitet:
Ok, Fehler gefunden^^
Vielen vielen Dank!

Ich hatte ausfehrsehen "An_Knoten.h" in der Datei "Knoten.h" inkludiert >.<

Danke für die Hilfe :)
 
Kleine Randbemerkung:
C++:
using namespace std;
ist durch ungeschriebene Gesetze in einem Header verboten. Auch sonst gibt diese Anweisung eigentlich immer "Abzüge" für dein Programm. Sie erzeugt so viele Probleme ohne einen Nutzen zu haben. Weder ist std:: zu schreiben viel Aufwand (sondern extrem wichtig!) noch gibt es keine Alternativen (using std::cout im Scope in dem es verwendet wird!!) dazu. Gewöhn dir das also so schnell wie möglich ab.
 

Neue Beiträge

Zurück