Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Stl vector class probleme

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.12.2003, 22:04 Uhr
~yeus
Gast


also: hier ist ein Modell des Fehlers, der in meinem richtigen prgramm auftaucht, aber es ist exakt das gleiche Problem, hier erstmal der Programmcode(am besten ihr versteht was von der STL library, um mir zu helfen):

C++:
#include <iostream.h>
#include <vector>
using namespace std;

class TEST
{
public:
    TEST()
    {
        a=1;
        b=2;
        c=3;
    };

    TEST(int Eingabe)
    {
        a=1;
        b=2;
        c=Eingabe;
    };

    ~TEST(){};

    int a,b,c;

    void show()
    {
        printf("\n\n\n\n%i, %i, %i\n\n\n", a,b,c);
        if(!child.empty())
        child[0].show();
    };


    vector<TEST> child;    
};

int main()
{
    TEST test1, test2(22), test3(33);

    cout<<"here begins the vector STL library test area!"<<endl;



    test1.child.push_back(test2);
    test2.child.push_back(test3);

    test1.show();
    //test2.show();

    return 0;
}



also mein Problem: wenn man sich die show()-funktion ansieht, sieht man, daß sie eigentlich rekursiv gedacht ist. in der Ausgabe von dem Programm geht die rekursion aber nur bis zum 1. child--objekt. dann ist schluß, egal wieviele childobjekte ich noch hinzufüge, es geht immer nur um ersten childobjekt aber wenn man im Hauptprogramm test4.show() die kommentarstriche wegmacht, sieht man, daß in test4.shot TROTZDEM noch test gespeichert ist. also.. kann mir hier irgenwer helfen? (ich hab auch schon probiert anstatt einer rekursiven funktion mal einfach die childobjekts direkt abzurufen, es funktioniert aber komischerweise genausowenig:

C++:
void show()
{
printf("%i, %i, %i\n\n\n", a,b,c);
printf("%i, %i, %i\n\n\n", child.front().a,child.front().b,child.front().c);
printf("%i, %i, %i\n\n\n", child.front().child.front().a,
                                   child.front().child.front().b,
                                  child.front().child.front().c);
}




Bearbeitung von Pablo:

[ cpp ] tag gesetzt. CPP Tags selber bentzen, danke!


Dieser Post wurde am 07.12.2003 um 22:12 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.12.2003, 22:24 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm also richtig verstehen tu ich das auch alles nicht aber wenn ichs so mache funzt das bei mir

C++:
#include<iostream>
#include<vector>

class TEST{

public:
    TEST(){a=1;b=2;c=3;}

    TEST(int Eingabe){a=1;b=2;c=Eingabe;}

    ~TEST(){}

    int a,b,c;

    void show(){
        printf("\n\n\n\n%i\t%i\t%i",a,b,c);
        for(std::vector<TEST>::iterator i=child.begin();i!=child.end();++i)
            i->show();
    }

    std::vector<TEST> child;    
};



int main(){
    TEST test1, test2(22), test3(33);

    std::cout<<"here begins the vector STL library test area!"<<std::endl;

    test2.child.push_back(test3);
    test1.child.push_back(test2);
    test1.show();
    return 0;
}




ach so hab ich vergessen zu erwähnen. Du musst das in umgekehrter reinfolge machen


C++:

test1.child.push_back(test2); //das schreibt in den child-vector von test1 eine zu test2 identische klasse
test2.child.push_back(test3); //das schreibt in den child-vector von test2 eine zu test4 identische klasse allerdings steht diese jetzt nur in test2 und nicht in test1 weil du das ja erst danach aufgerufen hast (es wird in test1 quasi nicht direkt mit test2 gearbeitet sondern mit einer kopie... test2 gehört nicht test1) deswegen die reihenfolge der aufrufe vertauschen



--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 07.12.2003 um 22:43 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.12.2003, 17:06 Uhr
~yeus
Gast


mein einziges Problem: ich brauch leider das Programm, so, daß es in jeder beliebigen Reihenfolge funktioniert )) sorry ) aber danke.. der Vorschlag hilft mir immerhin schon ein bischen mehr, das problem zu verstehen, ich denke das hat irgendwas mit dem copy-constructor zu tun.

wäre dankbar für jede Hilfe )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.12.2003, 17:11 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


in dem fall müsstest du dann mit pointern arbeiten würde ich jetzt mal so spontan sagen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.12.2003, 12:29 Uhr
~yeus
Gast



Zitat:
Windalf postete
in dem fall müsstest du dann mit pointern arbeiten würde ich jetzt mal so spontan sagen


super, danke.. funktioniert erstklassig hiermit:


C++:
std::vector<TEST*> child;  


dmait isses endlich unabhängig von der Reihenfolge (wegen einem stenrchen so #n Aufwand )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: