Announcement

Collapse
No announcement yet.

Eingebettete Klassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Eingebettete Klassen

    Hallo,

    ich habe ein Problem mit lokalen/eingebetteten/nested-Klassen.

    Ich habe eine Klasse A, die ein Ergebnis erzeugt. Das Ergebnis hat eine bestimmte Datenstruktur. Diese Datenstruktur möchte ich gern durch eine Klasse B abbilden. Diese Datenstruktur muss auch von einer Klasse C, die A verwendet lesbar sein. Das ganze sieht wie folgt aus:

    Code:
    typedef std::list<A::B>ResList;
    class A
    {
    public:
    class B
    {
    int res;
    B();
    };
    ResList resultList;
    bool doSth();
    ResList getResult();
    };
    
    int main()
    {
    A classA();
    if(classA.doSth())
    {
    ResList list = classA.getResult();
    std::cout << list << std::endl;
    }
    return 0;
    }
    Jetzt meckert mein Kompiler im beim Typedef. Ich habs auch schon mit Forwards probiert. Ich habe keine Ahnung wie ich das innere Objekt nach außen bekomme.

    Grüße
    MaX

  • #2
    gern durch eine Klasse B abbilden. Diese Datenstruktur muss auch von einer Klasse C, die A verwendet lesbar sein
    Wozu dann eine innere Klasse?
    Wozu einen typedef?
    Zuletzt editiert von Christian Marquardt; 12.05.2012, 16:41.
    Christian

    Comment


    • #3
      Weil ich gern ein Objekt hätte, welches eine komplexe Datenstruktur kapselt. Weiter bildet die Klasse A und B eine Einheit und von daher wollte ich ungern weitere Abhängigkeiten schaffen.
      Den Typedef mache ich, damit das Objekt auch für äußere Klassen verwendbar ist.

      Aber ich denke wozu ist doch erstmal schnuppe, oder? Viel wichtiger ist doch wohl, was das Problem ist...

      Comment


      • #4
        Eine eingebettete Klasse nutzt man, wenn die Hauptklasse - und nur die - diese benötigt. Eine Klasse wis du sie planst -mehrere Klassen brauchen sie - ist keine eingebettete Klasse. Aber wenn es schnuppe ist, dann mach es halt anders
        Christian

        Comment


        • #5
          Danke für die Hilfe.

          Comment


          • #6
            Wenn du keine weiteren Infos gibst.....Liste? Typedef? Ich sitze nicht an deinem Rechner. Ich sehe nur das obige
            Fehlermeldung?
            Zuletzt editiert von Christian Marquardt; 12.05.2012, 18:04.
            Christian

            Comment


            • #7
              Also ich lese Daten, diese Daten schreibe ich jeweils in ein Ergebnisobjekt. Diese Ergebnisobjekte fliegen in eine Liste. Da ich diese Klasse in mehreren Projekten nutze, wollte ich da so wenige Abhängigkeiten wie möglich schaffen. Ich habe mir halt in meinem jugendlichen Leichtensich gedacht, dass ich einfach eine weitere Abstraktionsebene einbaue, mit Typedef nen ListenTyp erschaffe, der dann durch das einbinden der Header auch in der nutzenden Klasse verfügbar ist. In diesen Fall oben ist es main().

              doSth() -> Erstellt in dem Fall mehere Ergebnis Objekte und schiebt diese jeweils in die Typedef liste.

              getResult -> Holt die Ergebnisliste.

              Der Kompiler nimmt letztendlich mein Typedef nicht an und zeigt Fehler.
              Vllt ist es auch unsinn es so zu realisieren. Wenn du eine bessere Idee hast, dann werd ich diese gern annehmen.

              Fehlermeldung: Fehler 1 error C2027: Verwendung des undefinierten Typs "A"


              Grüße

              Comment


              • #8
                Wenn das der ganze Code ist den du hast (Header-Dateien?), besagt die Fehlermeldung, dass zum Zeitpunkt des typedefs die Klasse A noch nicht dem Compiler bekannt ist. Das ist sie nach obigen Code auch nicht, da A erst später deklariert wird
                Christian

                Comment


                • #9
                  Ich habe ja ne Forward-Deklaration gemacht. Sollte das dann nicht reichen?

                  Comment


                  • #10
                    Ich sehe keine
                    Christian

                    Comment


                    • #11
                      Boh....

                      Ich machs jetzt anders....Danke trotzdem.

                      Comment


                      • #12
                        Was heisst hier trotzdem!

                        :-(

                        Wo ist dein forward?
                        Christian

                        Comment


                        • #13
                          a.h
                          Code:
                          class A;
                          class A::B;
                          typedef std::list<A::B>ResList;
                          class A
                          {
                          public:
                          class B
                          {
                          int res;
                          B();
                          };
                          ResList resultList;
                          bool doSth();
                          ResList getResult();
                          };
                          main.cpp
                          Code:
                          #include "a.h"
                          
                          int main()
                          {
                          A classA();
                          if(classA.doSth())
                          {
                          ResList list = classA.getResult();
                          std::cout << list << std::endl;
                          }
                          return 0;
                          }
                          Es sollte eigendlich als schematisches Beispiel herhalten, aber ich habs jetzt mal vervollständigt.

                          Comment


                          • #14
                            Ahja, neue Forenanforderungen:

                            Zum beantworten der Frage sind jetzt hellseherische Fähigkeiten erforderlich. Insbsondere, was Fehlermeldungen betrifft und deren Lösungen.
                            Christian

                            Comment

                            Working...
                            X