Fehlermeldung wegen Templates bei Datei-Reorganisation



  • Hi,

    ich habe ein Klassen-Template

    template<class N, class C> class Base_Tree
    

    und eine daraus abgeleitete Klasse

    class Tree : public Base_Tree<Node, Node_Container>
    

    Dabei sind Node und Node_Container irgendwelche Klassen.

    Bisher befanden sich die Klassendefintionen von Tree und Base_Tree sowie die Methodendefinitionen von Base_Tree in einer Datei (tree.h) und die Methodendefinitionen von Tree in einer weiteren (tree.cpp). Ich wollte nun tree.h teilen: In eine neue Datei base_tree.h kommt alles von Base_Tree, nur die Klassendefinition von Tree verbleibt in tree.h.

    Dann erhalte ich allerdings in der Klassendefinition von Tree die Fehlermeldungen

    expected `{' before ‘<’ token
    expected template-name before ‘<’ token
    expected unqualified-id before ‘<’ token
    explicit instantiation of non-template type ‘Base_Tree’

    in Bezug auf die Zeile

    class Tree : public Base_Tree<Node, Node_Container>
    

    Die Header-Datei base_tree.h ist dabei in tree.h included.

    Ich vermute, dass ich Base_Tree vorab deklarieren muss (das Programm hat mehr als 10000 Zeilen, es ist nicht mehr übersehbar, wer hier was in welcher Reihenfolge included), weiss aber nicht, wie das geht.

    Weiss das jemand oder hat jemand eine andere Idee, warum die Fehlermeldungen kommen?



  • In deiner tree.h müssen voraussichtlich die folgenden Klasssen vollständig bekannt sein (Include):
    a) Node
    b) Node_Container
    c) Base_Tree

    Je nach Aufbau des Templates mag es für Node und Node_Container nicht gelten, die Wahrscheinlichkeit ist aber recht hoch.

    Es könnte sich aber vielleicht auch um andere Fehler handeln, anhand des gezeigten Codes kann ich das aber nicht sehen.

    cu André



  • Ich habe vor der Klassendefinition von Tree mittels

    class Node;
    class Node_Container;
    

    Node und Node_Container vorab deklariert (und ihre Header-Files included). Meine Vermutung ist nun, dass ich das vorab deklarieren auch für Base_Tree machen muss. Wie man Klassen-Templates vorab deklariert, ist mir aber nicht bekannt.



  • ingobulla schrieb:

    Ich habe vor der Klassendefinition von Tree mittels...Node und Node_Container vorab deklariert (und ihre Header-Files included).

    Entweder Forward Declaration im Header (und Include im Source) oder Include im Header, nicht beides. Und hier wird der Include nötig sein. Und ein Template lässt sich nicht vorwärts deklarieren.


Anmelden zum Antworten