Gå til innhold

Fler spm! Denne gangen om pekere og iteratorer!


Anbefalte innlegg

Kort om prosjektet:

Driver og lager en liten klasse for å kunne tråkke gjennom mapper i windows.

Følgende kode skulle holde:


struct Directory {
 std::string name;    // name of directory we are in
 std::vector<Directory*> folders;// list of directories in the directory we are in
 std::vector<std::string> files;	// list of files in the directory we are in
};

typedef std::vector<Directory*> FolderList;
typedef std::vector<std::string> FileList;

Directory baseDir;
FolderList::const_iterator itFolderList;
FileList::const_iterator itFileList;

std::string dirManager::getPrevDir() {
if(baseDir.folders.begin() <= itFolderList-1) {
 return --itFolderList->name;
 /*Directory* tmp = *--itFolderList;
 return tmp->name;*/
}
else return getCurDir();
}

 

Problemet ligger i nederste funksjon.(som er en del av klassen "dirManager")

 

Slik som det står nå, funker ikke funksjonen.

En måte jeg fikk det til å funke, er kommentert ut, men denne er lite optimal etter min mening. (dessuten, slik den står nå, er den vel en memory leak?)

Bare lurte på om det var noen måte å hente navnet(name) direkte ut ved hjelp av iteratoren, eller jeg:

Directory* tmp = *--itFolderList;
std::string tmpStr = tmp->name;
delete tmp;
return tmpStr;

(eller noe i den duren?)

 

Hyggelig med alle svar, si ifra om dere trenger mer kode, det er mye å ta av :p

Lenke til kommentar
Videoannonse
Annonse

En iterator fungerer som en peker til et element i containeren. Ettersom den holder pekere til Directory, blir dette som en peker til en peker. For å hente ut name må du altså dereferere to ganger. Det gjør du ved å skrive: (*itFolderList)->name

Lenke til kommentar

Aha!

Takk skal du ha!

Prøvde alle mulige metoder (bl.a **itFolderList->name), så jeg var inne på det, men fikk det søtten ikke til å funke, uansett hva jeg gjorde.

Nuvel, takk skal du ha, skal prøve dette når jeg får windows64 til å boote skikkelig.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...