forward declaration Problem



  • edit:
    siehe weiter unten (incompatibilität bei der forward declaration)

    Hi, bin jetz gleich beim nächsten Problem, bei dem es mir
    schwer fällt überhaupt einen Weg an die Sache zu finden.

    Ich versuch mal nen Sinnvolles Beispiel aufzustellen:

    //foo.h
    #include "bar.h"
    
    class foo
    {
    
    	bar *child;
    
    };
    
    //bar.h
    
    class bar
    {
    	foo *parent;
    
    public:
    	bar(foo *parent);
    
    };
    

    Ich hoffe das ist jetz nicht zu simple gehalten ^^
    Und ja ich weiß, dass die eigentliche definition noch fehlt...
    Also was ich gern erreichen möchte ist, dass foo sich ein bar objekt anlegt,
    das bestimmte Aufgaben erledigt, die sich auf das foo objekt beziehen.

    Dazu würde ich jetz bar mit der selbstreferenz von foo instanziieren, so das
    bar weiß, dass es sich auf foo beziehen soll.

    Ich bin mir nicht ganz sicher ob das in die Eltern - Kind beziehung gehört, falls nicht sollte ich den Titel noch mal ändern.

    Wie kann ich jetzt im Bereich von bar überhaupt auf foo zugreifen, um foo als typ zur verfügung zu haben?
    Durch das include weiß foo jetzt von bar, aber umgekehrt komm ich nicht wirklich weiter. ich kann bar nicht davon überzeugen, dass es einen Typ foo gibt, ist ja klar soweit. Nur wie stell ich das an?

    Ich bin für jeden Rat dankbar.



  • ZSchneidi schrieb:

    Wie kann ich jetzt im Bereich von bar überhaupt auf foo zugreifen, um foo als typ zur verfügung zu haben?
    Durch das include weiß foo jetzt von bar, aber umgekehrt komm ich nicht wirklich weiter. ich kann bar nicht davon überzeugen, dass es einen Typ foo gibt, ist ja klar soweit. Nur wie stell ich das an?

    Ist doch einfach. Der Typ foo ist definiert in foo.h. Alles was foo verwenden will, includiert den Header. Also -> In bar.h den foo.h includieren.
    Und JETZT hast du das eigentliche Problem, das immer auftritt. Wechselseitiges includen.
    Lösung: Forward Declaration. Es gibt sicher viele Links, die das ausführlich erklären, deshalb erstmal der Verweis auf Google.



  • Ok, dann lag ich ja doch garnicht so falsch, hatte das schon versucht mit dem include, aber bisher bekomm ich immer wieder den hinweis:

    ISO C++ forbids declaration of 'bar' with no type

    deswegen der verdacht, dass das mit dem gegenseitigen includs allein
    nicht so wirklich sinnvoll sein kann.

    Dachte mir auch schon, dass es evtl. was mit der forward declaration zu tun haben könnte. Also werde ich mir das jetz mal genauer anschauen.



  • Also ich habs jetzt mal mit der forward declaration versucht.
    Das hatte ich vorher zwar auch schonmal, aber das lief nicht.

    Da ich namespaces benutze hatte er ein problem damit, dass ich versucht
    habe bei der forward declaration über die namespaces zu qualifizieren.
    Das mag der wohl garnicht gern, hab ich aber nirgends ein Beispiel zu
    gefunden, wo einem das gezeigt wird.

    Jetzt stehe ich vor einem anderen Problem:

    cannot convert 'Bar::bar*' to 'Foo::bar*' in assignment
    

    So wie ich das verstehe, ist die forward declaration von bar aus dem namespace Foo
    nicht kompatibel zur eigentlichen definition bar aus dem namespace Bar.

    Ich vermute jetzt dass ich dadurch das definierte Bar::bar einem
    undefinierten Foo::bar zuweisen will. Oder sehe ich das falsch.

    Frage ist nur, wei sich das behandeln lässt.


Anmelden zum Antworten