Datenstruktur / KLassenmethodendeklaration



  • Hallo

    Ich habe eine KLasse Test, in dem es ein Attribut des Types DataContainer (ebenfalls eine Klasse) gibt. Ziel ist, viele Werte zu einem Schlüssel zu speichern. Bisher habe ich folgendes Versucht:

    Meine beiden Klassen (Testklassen, daher auch so wie sie sind):
    [cpp]
    class DataContainer
    {
    private:
    deque<AnsiString> DCData;

    public:
    void SetDCData (AnsiString ExtData);
    AnsiString GetDCData (int Index);
    int GetDCDataSize (void);
    };

    class Test
    {
    private:
    AnsiString Procedure;
    deque<DataContainer> Data;

    public:
    void SetProcedure (AnsiString ExtProcedure);
    AnsiString GetProcedure (void);

    void SetData (AnsiString ExtData);
    AnsiString GetData (int Index);
    int GetDataSize(void);
    };

    [/cpp]

    Wenn ich jetzt die Methode:

    void Test::SetData (AnsiString ExtData)
      {
      Data.SetDCData(ExtData);
      }
    

    aufrufe bekomme ich flgende Fehlermeldung:
    [C++ Fehler] TestClass.cpp(51): E2316 'GetDCData' ist kein Element von 'deque<DataContainer,allocator<DataContainer> >'

    Ich dneke mal das das daher kommt, das SetDCData ja eine Methode von DataContainer ist, und somit in der obringen Mehtode nicht bekannt ist. Folglich müsste ich also ein Objekt mit übergeben welches die Methode kennt.
    Dann würde aber die gnaze Struktur wieder keinen wirklichen Sinn machen.
    Weiß jemand wie man bei sowas vorgeht?
    Oder hat jemand eine andere Idee das oben beschriebene Problem zu lösen?

    Danke!!!!



  • Du hast Deine Elemente in ein Packet gesteckt. Um es nun benutzen zu können musst Du es es zuvor auspacken. Iteratoren helfen Dir dabei.

    #include <deque>
    #include <iostream>
    
    struct test
    {
      int a;
    };
    
    int main(int argc, char* argv[])
    {
        test temp;
        std::deque<test> i;
        temp.a = 12;
        i.push_back(temp);
        temp.a = 123;
        i.push_back(temp);
        temp.a = 124;
        i.push_back(temp);
        temp.a = 152;
        i.push_back(temp);
        temp.a = 172;
    
        // for_each etc. aus den algorithm lassen sich ebenfalls verwenden
        for(std::deque<test>::iterator pos = i.begin();pos != i.end();++pos)
        {
            ++pos->a;
            std::cout<<pos->a<<'\n';
        }
    
        return 0;
    }
    


  • Danke!

    Habe in der FAQ Ecke noch gefunden das auch mehrdimensionale vector container möglich sind. sehen auch sehr vielversprechend aus!


Anmelden zum Antworten