2009-03-06 9 views
-1

question Débutant ici:champ vectoriel avec struct

im lecture d'un fichier, le stockage des feilds dans les membres struct, puis stocker le nom du struct dans un vecteur.

Je génère la taille de mon vecteur et le débogue pour voir si cela a fonctionné et j'ai les polices du fichier isolées. Je fais ceci dans une fonction vectorielle * ptrFunc().

et je renvoie le vectorObject donc je n'ai pas besoin d'utiliser une déclaration ptr obj de type vectoriel.

En passant d'une fonction à l'autre, même avec mon type de retour, ai-je besoin d'analyser à nouveau le fichier?

Heres un peu de code, im ne pense pas im être très clair:

//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); 
     ... 

donc ce où je déboguer et mes membres Structure ai perdu toutes les données!

Que devrais-je faire dans la première fonction afin que les membres de ma structure ne perdent pas leurs données?

Ma conjecture est de simplement créer une fonction vide ou quelque chose. Mais alors stocker cela dans un vecteur serait alors le problème.

J'ai juste des problèmes de portée. : p

+0

S'il vous plaît ajouter au moins une étiquette avec la langue que vous utilisez. – tehvan

+0

Où est créé l'objet 'v' dont l'adresse est retournée par' firstFunc'? Montrez-nous un code complet. – dirkgently

Répondre

1

Est-ce que c'est peut-être ainsi que le vecteur 'v' vous revenez de firstFunc() est alloué sur la pile? Si c'est le cas, alors c'est probablement votre problème, puisque vous renvoyez l'adresse d'un objet qui sort de la portée lorsque la fonction se termine.

Corrigez cela, renvoyez le vecteur par valeur ou créez-le sur le tas en utilisant new.

2

Déclarez vos fonctions ainsi:

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

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

et de les utiliser de cette façon

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