Gå til innhold

Feil ved opprettelse objekt i switch


Anbefalte innlegg

Hei!

 

Jeg vet ikke om dette har noe med at jeg bruker en switch, men jeg får i alle fall to feil i programmet mitt, relatert til switchen.

 

Jeg bruker denne klassen til å lete opp informasjon fra en tekstfil om brukere. Man skal bare trenge å skrive inn bruker-nummeret, og skal da få all informasjon om brukeren i retur, som navn, adresse og alder:

http://pastebin.com/m1b3c5ce2

 

Denne classen tror jeg fungerer helt ok. Hvis noen har litt for mye tid til overs, kan de godt lese gjennom og gi meg tilbakemelding på klassen, men jeg tror den fungerer hensiktsmessig so far.

 

Men poenget er når jeg skal opprette et objekt av klassen! Her er main:

int main()
{
int valg;
string un;
vector<string> info;
while(1)
{
	cout << "Dette er menyen! Hva vil du gjøre?" << endl;
	cout << "1: Søke etter kundeinformasjon" << endl;
	cout << "2: Legge til kundeinformasjon" << endl;
	cout << "3: Avslutte";
	cin >> valg;

	switch(valg)
	{
	case 1:
		cout << "Kundenummer: ";
		cin >> un;
		User user(un);
		cout << "Nummer: " << user.number;
		cout << "Navn: " << user.name;
		cout << "Adresse: " << user.address;
		cout << "Annet: " << user.other1;
		cout << "Annet: " << user.other2;
		break;
	case 2:
		cout << "Denne funksjonen er ikke laget enda." << endl;
		break;
	case 3:
		return 0;
	}
}
return 0;
}

 

Nå får jeg disse errorene når jeg skal kompile:

1>c:\users\arne\documents\visual studio 2008\projects\bank_project\bank_project\main.cpp(156) : error C2360: initialization of 'user' is skipped by 'case' label

1> c:\users\arne\documents\visual studio 2008\projects\bank_project\bank_project\main.cpp(149) : see declaration of 'user'

1>c:\users\arne\documents\visual studio 2008\projects\bank_project\bank_project\main.cpp(159) : error C2360: initialization of 'user' is skipped by 'case' label

1> c:\users\arne\documents\visual studio 2008\projects\bank_project\bank_project\main.cpp(149) : see declaration of 'user'

 

Er det ikke lov å initsialisere objekt i switcher? :S Det må jeg, siden det er snakk om å lage objektet i menyen. Jeg kan ikke opprette objektet før jeg har fått input fra brukeren (i menyen).

 

Håper på tilbakemelding,

 

Arne :)

Endret av Arne
Lenke til kommentar
Videoannonse
Annonse
Er det ikke lov å initsialisere objekt i switcher? :S Det må jeg, siden det er snakk om å lage objektet i menyen. Jeg kan ikke opprette objektet før jeg har fått input fra brukeren (i menyen).

 

Det er ikke lov å erklære nye variabler i en case, men du kan gjøre det ved å pakke de inn i et nytt scope (se koden)

Poenget er at ikke alle stiene går gjennom casen og da er det ikke sikkert at variablen "finnes".

Når du pakker koden i et nytt skope vil ikke variablen "finnes" på utsiden og da heller ikke utenfor casen og da er alt bra.

 

Du kan jo også lage en peker utenfor switchen for så lage et objekt som pekeren peker til (dvs. bruke new), men bare husk å sette pekeren til 0 i den den lages så du har en måte å se om objektet ble laget.

 

 

int main()
{
int valg;
string un;
vector<string> info;
while(1)
{
	cout << "Dette er menyen! Hva vil du gjøre?" << endl;
	cout << "1: Søke etter kundeinformasjon" << endl;
	cout << "2: Legge til kundeinformasjon" << endl;
	cout << "3: Avslutte";
	cin >> valg;

	switch(valg)
	{
	case 1:
		cout << "Kundenummer: ";
		cin >> un;
		{//Denne er ny 
			User user(un);
			cout << "Nummer: " << user.number;
			cout << "Navn: " << user.name;
			cout << "Adresse: " << user.address;
			cout << "Annet: " << user.other1;
			cout << "Annet: " << user.other2;
		}//Denne er også ny
		break;
	case 2:
		cout << "Denne funksjonen er ikke laget enda." << endl;
		break;
	case 3:
		return 0;
	}
}
return 0;
}

 

 

lykke til

Lenke til kommentar

Jeg vet ikke helt om jeg forstod det du mente om peker utenfor. Jeg tror dette er mest hensiktsmessig, siden jeg nå har kommet oppi issuen at jeg skal kunne lage objekter inni en case og bruke den senere.

 

Cluet er at jeg skal opprette et objekt av informasjonen jeg får inni en case, samt at jeg skal kunne bruke den utenfor casen!

 

Fint om du kunne utdype det litt, med peker!

 

Bank *a;

*a = 0;

 

...funker i alle fall ikke. :)

Lenke til kommentar
Bank *a;

*a = 0;

Du settet et "tilfeldig sted" av minnet ditt til null (hvis du hadde fått kompilert) og det liker sikkert ikke OSet ditt (håper jeg :) ).

Det du må gjøre et å sette addressen som pekern peker til til null........ prøver en annen måte å si det på.

 

a er addresse til en bank, la oss si at banken holder til på 42.

Det du gjør i koden er at du setter banken til 0 (prøver hvertfall), men det du burde gjøre er å sette addressen som er skrevet i a til 0.

 

Jeg er ikke så godt til å forklare, men håper det hjalp.

 

Har du vært mye borti pekere før?

 

Fint om du kunne utdype det litt, med peker!

 

Jeg lager en peker som jeg setter til verdien 0.

Når jeg da et inne i en case så kan jeg gi pekeren en verdi til et object som jeg senere kan bruke.

Siden jeg ikke har erklært noen ny variabel så kompileres også alt fint.

 

Håper det gjort ting klarere, hvis ikke så bare spør.

 

 

 

int main()
{
int valg;
string un;
vector<string> info;
while(1)
{
	cout << "Dette er menyen! Hva vil du gjøre?" << endl;
	cout << "1: Søke etter kundeinformasjon" << endl;
	cout << "2: Legge til kundeinformasjon" << endl;
	cout << "3: Avslutte";
	cin >> valg;

	User* user= 0; //denne er ny

	switch(valg)
	{
	case 1:
		cout << "Kundenummer: ";
		cin >> un;
		user = new User(un); //også ny
		cout << "Nummer: " << user.number;
		cout << "Navn: " << user.name;
		cout << "Adresse: " << user.address;
		cout << "Annet: " << user.other1;
		cout << "Annet: " << user.other2;
		break;
	case 2:
		cout << "Denne funksjonen er ikke laget enda." << endl;
		break;
	case 3:
		return 0;
	}

	if(user)//også ny
	{
		//noen må ha laga et object så det må jeg gjøre viktige ting med. <-todo
	}

}
return 0;
}

 

 

Lenke til kommentar
Takk skal du ha!

 

Kan du si meg hvorfor vi her må bruke pointers istedenfor vanlige objekt?

 

Du kan nok bruke vanlige objecter også, men blir det ikke så lett å finne ut om du har laget et nytt object inne i casen.

Hvis du har en variabel som du kan bruke til å finne ut om den har blitt endret inne i casen så er det ingenting som stopper deg i det.

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...