Hur får jag bort: "temp" is undefined?

Permalänk
Medlem

Hur får jag bort: "temp" is undefined?

Hej,

Har problem med en bubble sort i C++.

Jag har skrivit in den från våran lärobok, men får fel på en av "temp" i sorteringskoden.

Så här ser det ut:

int myList[] = { temperatur[0],temperatur[1], temperatur[2], temperatur[3] };
int max = 3;

for (int i = 0; i < max; i++)
{
int nrLeft = max - i;
for (int j = 0; j < nrLeft; j++)
{
if (myList[j] > myList[j + 1])
int temp = myList[j]; <===== denna "temp" är det inga problem med <====
myList[j] = myList[j + 1];
myList[j + 1] = temp; <===== denna "temp" är enligt felmedd. : undefined <====
}
}

for (int i = 0; i < 4; i++)
cout << myList[i] << " \n";

Varför går en igenom, men inte den andra?
Dessa står väl som temporary?
har provat att skriva
int temp
int; temp;
som Visual Studios föreslår, men det vill iaf inte lösa sig.

För jag hade det bekymret tidigare när jag hade det som int temp = temperatur

Är jag helt ute & cyklar igen? *suck* Varför e d så svårt...... !?

Tacksam för hjälp
fr nybörjaren

Permalänk
Hedersmedlem

Skriv gärna code-taggar runt all kod, såhär:

[code]
... all kod här...
[/code]

Problemet är åtminstone att du deklarerar variabeln inuti if-satsen, så den är bara giltig på raden du skapar den.
"int temp = myList[j]" körs om "myList[j] > myList[j+1]" är sant, och de två raderna under körs alltid. Är det meningen att alla ska köra enbart om if-satsen är sann behövs { } runt de tre raderna, annars är det enbart fram till nästa semikolon som tillhör if-satsen, och övriga körs alltid.

Alternativt, utifall du vill sätta variabeln när if-satsen är sann och alltid köra de andra två raderna -- dvs inte i just detta fallet -- så måste du skapa variabeln utanför if-satsen, t ex såhär:

int a = 0; if (...) { a = 10; } std::cout << a << std::endl; // Skriver 10 om if-satsen är sann, annars 0

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

Permalänk
Medlem

Ett tips är att aldrig utelämna { } på t.ex. if- eller for-satser även om de bara innehåller en sats, huvudvärken det ofta leder till är inte värt att spara en rad eller två.

Permalänk
Medlem

Ok, ska tänka på det där med [code], visste inte det!

Jag vet inte om den alltid ska göra de andra två.
Den ska först jämföra vid "if" sen byta plats om den är större till vänster än höger, så att den minsta kommer först & till slut den största kommer sist.

Men såg nu när du skrev, att jag saknade {} efter "if" & det gjorde susen, nu funkar det iaf.

Stirrar & provar så mycket att man ser ju inte det självklara....
Tack för hjälpen!