2009-03-06 5 views
-1

Einsteigerfrage hier:Vektorbereich mit Struktur

Ich lese eine Datei, die Feilds in Strukturelemente speichern, dann den Namen der Struktur in einem Vektor speichern.

Ich gebe die Größe meines Vektors aus und debugge es, um zu sehen, ob es funktionierte, und ich habe die Feilds von der Datei isoliert.

Ich mache dies in einem Vektor * ptrFunc() -Funktion.

und ich gebe das & vectorObject zurück, also muss ich nicht eine vektorart ptr obj Erklärung verwenden.

Wechsel von einer Funktion zur anderen, auch mit meinem Rückgabetyp, muss ich die Datei erneut analysieren?

Heres einige Code, im denke nicht, daß im sehr klar zu sein:

//Varaible Declartions/Intializations 
    //Open File 

    vector<myStruct> *firstFunc() 
    { 

    while (!inFile->eof()) 
    { 
    // Isolating each feild delimited by commas 
    getline(*inFile, str1, ','); 
    myStruct.f1 = str1; 

    getline(*inFile, str2, ','); 
    myStruct.f2 = str2; 

    getline(*inFile, str3, ','); 
    myStruct.f3 = atof(str3.c_str() ); 

    getline(*inFile, str4); 
    myStruct.f4 = atof(str4.c_str()); 

    v.push_back(myStruct); 
     // We have the isolated feilds in the vector... 
     // so we dance 
     } 
    return &v; 
     } 
    // Now do i still have to do the getlines and push_back with the vector again in another function? 

    vector<myStruct> *otherFunc() 
    { 
     sStruct myStruct; 
     vector<myStruct> *v = firstFunc(), 
     vInit; 
     v = &vInit 
     vInit.push_back(myStruct); 
     ... 

so das ist, wo ich es debuggen und meine Struktur Mitglieder haben alle Daten verloren!

Was sollte ich prolly in der ersten Funktion tun, damit meine Strukturmitglieder ihre Daten nicht verlieren?

Meine Vermutung ist nur eine leere Funktion oder etwas zu erstellen. Aber dann wäre das Problem in einem Vektor zu speichern.

Ich habe nur Scoping-Probleme. : p

+0

Bitte fügen Sie mindestens einen Tag mit der Sprache, die Sie verwenden. – tehvan

+0

Wo wird das 'v' Objekt erstellt, dessen Adresse Sie von' firstFunc' zurückgeben? Zeigen Sie uns einen vollständigen Code. – dirkgently

Antwort

1

Ist es vielleicht so, dass der Vektor 'v', den Sie von firstFunc() zurückgeben, auf dem Stapel zugeordnet ist? Wenn ja, dann ist das wahrscheinlich Ihr Problem, da Sie die Adresse eines Objekts zurückgeben, das beim Beenden der Funktion den Gültigkeitsbereich verlässt.

So beheben Sie das, geben Sie den Vektor nach Wert zurück, oder erstellen Sie es auf dem Heap mit new.

2

Erklären Sie Ihre Funktionen auf diese Weise:

void firstFunc(vector<myStruct> &v) 
{ 
... 
} 

void otherFunc(vector<myStruct> &v) 
{ 
... 
} 

und verwenden Sie sie auf diese Weise

void foo() 
{ 
vector<myStruct> v; 
firstFunc(v); 
otherFunc(v); 
}