Arne Skrevet 19. juni 2008 Del Skrevet 19. juni 2008 (endret) Hei! Jeg har en funksjon: http://pastebin.com/m7e200ae8 Dette er main: int main() { vector<string> info; getInfo(info, "14548"); cin.get(); return 0; } Poenget med denne koden, er at du skal kunne, ved hjelp av å bare vite et kundenummer, lete frem opplysninger om en person fra en tekstfil. Her er et eksempel på hvordan en tekstfil kan se ut: (14548)(Arne Kristoffer)(Abcveien 2) (34234)(Per)(Karl johans gate 4) osv... Du virkemåten til funksjonen, er at du passer en refferanse til en vector som argument til funksjonen, samt en tekststring (som skal være kundenummer), og outputtet blir lagt rett i vectoren. Jeg vet ikke om dette er en litt gammeldags måte å gjøre det på, i så fall får vi endre på det når jeg har fått dette til å virke. Problemet: Hvis jeg kaller getInfo(info, "14548"), så skjer akkurat det som skal skje. Jeg får en vector med fem elementer i, der tre er fylt. Men, hvis jeg kaller getInfo(info, "34234"), får jeg en assertion error: vector subscribt out of range. Noen tips til hva jeg kan gjøre? [Edit]Ehem... det heter ikke forfor..[/edit] Endret 19. juni 2008 av Arne Lenke til kommentar
teflonpanne Skrevet 20. juni 2008 Del Skrevet 20. juni 2008 Orker ikke å lese kildekoden desverre, std::map er nok bedre egnet enn en vector til dette uansett. Kan også lønne seg å lære seg å bruke en debugger eller ihvertfall skrive ut litt debuginfo med printf så du kommer litt nærmere hvor i koden den feiler enn bare en hel funksjon. Lenke til kommentar
Giddion Skrevet 20. juni 2008 Del Skrevet 20. juni 2008 Orker ikke å lese kildekoden desverre, std::map er nok bedre egnet enn en vector til dette uansett. Med mindre detter er en skole oppgave eller noe du lager for å lage noe for å lage noe som ikke skal brukes profesjonelt. Så støtter jeg teflonpanne fult ut med std::map, vector er ikke laget til det du bruker det til. std::map er laget for å søke gjennom og er optimalisert for det. En debuger er også kjekt å kunne bruke. Lenke til kommentar
Arne Skrevet 20. juni 2008 Forfatter Del Skrevet 20. juni 2008 Joda, jeg kan bruke en debugger helt grunnleggende! Takk for råd ang. maps, skal se på det i morgen. Men jeg har funnet ut når det krasjer. Her er koden: if (an == vec[0]) { returnvector = vec; return; } Her sjekker jeg om det første elementet i vectoren (kundenummeret) er likt med det kundenummeret vi har spesifisert (an). Hvis det samsvarer, skal vi returnere hele vectoren (vec), som inneholder informasjon om brukeren. Jeg lager dette bare for å lære meg noe c++! Lenke til kommentar
Arne Skrevet 20. juni 2008 Forfatter Del Skrevet 20. juni 2008 Fikk det til! Det var en posisjonsvariabel jeg måtte nullstille etter hver gang jeg hadde kjørt gjennom en oppføring i vectoren! Jeg bare lurer på en ting! Hva er det som er mest typisk C++? Å la metoder returnere verdier (1) eller å la metodene endre innholdet i andre variabler som en slags side-effekt, og ikke la metoden returnere noe (2)? Eksempel (1): //Deklarasjon av getInfo void getInfo(vector<string> &returnvector, string an); vector<std::string> info; getInfo(info, "1234") std::cout << info[0]; [/cout] Her vil effekten endre innholdet i info, og man kan fra info få vite hva resultatet av dette ble. Verdien av info blir endret vha. en refferanse Eksempel (2): [code] //Deklarasjon av getInfo vector<string> getInfo(string an); vector<std::string> info = getInfo("3423"); std::cout << info[0]; Her vil info endre verdi vha. returneringsverdi. Så, hva er mest C++ og OOP-aktig? Neste oppgaver blir å legge om til std::map og lage en funksjon hvor man kan legge brukere til i database-filen. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå