Vector in Vector geht nicht

TimN

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem:
Habe eine Klasse:

Code:
class Object
{
public:
    void Load(int f);
    std::vector<int> zahlen;
    void Print();
    int foo;
};


void Object::Load(int f)
{
    foo = f;
    for(int i = 0; i < 10; i++)
    {
        zahlen.push_back(n);   // n ist eine globale Variable
        n++;                          // dir nur dazu da ist um das Problem zu zeigen
    }
}

void Object::Print()
{
    printf("foo: %i\n", foo);
    for(int i = 0; i < 10; i++)
    {
        printf("%i\n", zahlen[i]);
    }
}

Wenn ich jetzt einen Vector vom Typ Object erstelle und mir von jedem objekt die Werte per Print() ausgeben lasse, bekomme ich für "foo" die korrekte (jedes mal eine andere) Ausgabe, jedoch ist der Inhalt von "zahlen" immer gleich.

Mein Hauptprogramm:
Code:
    n = 0;
    std::vector<Object> objekte;

    Object *object = new Object();
    for(int i = 0; i < 10; i++)
    {
        object->Load(i);
        objekte.push_back(*object);
    }

    for(int i = 0; i < 10; i++)
    {
        objekte[i].Print();
    }

Kann das so überhaupt funktionieren? Wie kann ich es richtig machen. Also Ziel des ganzen ist, dass am Ende die Werte ausgegeben werden, die bei Load() eingefügt werden.

PS: Wie ist hier im Forum eigentlihc das Tag für C++-Quelltext?
 
Hi.
Hallo,

ich habe folgendes Problem:
Habe eine Klasse:

Code:
class Object
{
public:
    void Load(int f);
    std::vector<int> zahlen;
    void Print();
    int foo;
};
Du solltest die Membervariablen natürlich als "private" deklarieren.

Code:
    Object *object = new Object();
Warum verwendest du hier einen Zeiger? Du gibst vermutlich den Speicher auch nicht wieder mit delete frei, oder?

Du brauchst hier keinen Zeiger. Es reicht:
C++:
Object object;

Code:
    n = 0;
    std::vector<Object> objekte;

    for(int i = 0; i < 10; i++)
    {
        object->Load(i);
        objekte.push_back(*object);
    }
Wenn du ein Objekt der Klasse Object anlegst und Load aufrufst, hat der zahlen Vector dieses Objekts 10 Elemente. Dann fügst / kopierst du das Objekt in den Vektor hinein.
Dann rufst du wieder Load auf. Danach hat der zahlen Vektor 20 Elemente. Dann fügst / kopierst du das Objekt in den Vektor hinein. Dann rufst du wieder Load auf. Danach hat der zahlen Vektor 30 Elemente. Dann fügst / kopierst du das Objekt in den Vektor hinein.
Dann rufst du wieder Load auf. Danach hat der zahlen Vektor 40 Elemente... usw.

D.h. in dem objekte Vector sind Objekte vom Typ Object gespeichert und das erste Objekt hat ein zahlen Vektor mit 10, das zweite mit 20, das dritte mit 30... usw. Elementen.

Das einzige Problem ist, das du das nicht ausgibst, da du für jeden Vektor immer nur die ersten 10 Elemente anzeigst.

PS: Wie ist hier im Forum eigentlihc das Tag für C++-Quelltext?
[code=cpp]...[/code]

Gruß
 
Zurück