Kezdőoldal » Számítástechnika » Programozás » C++ miért nem engedi a . Size...

C++ miért nem engedi a . Size () -ot használni a tömb méretének kifejezésekor?

Figyelt kérdés

int i=0,maximum;

string szam[4];

szam[0]=egyes;

szam[1]=kettes;

szam[2]=harmas;

szam[3]=negyes;

szam[4]=otos;

while(i<szam.size()){

maximum=szam[0];

if(maximum<szam[i]){

maximum=szam[i];

i++

}

}


A fenti programrészletben az egyes, kettes stb. változók, amiknek az értéket a program korábban összeszámolta. Azt kéne eldönteni, melyik értéke a legnagyobb, ezért bele helyeztem mindegyiket egy szam nevű tömbbe. De valami baja van a szam.size() kifejezéssel, nem engedi lefuttatni a programot.


error: request for member 'size' in 'szam', which is of a non-class type 'int [4]'


Mi a baja?



2016. máj. 8. 22:08
 1/8 A kérdező kommentje:
Bocsánat, a szam[4] nem string eredetileg, hanem int, csak megpróbáltam stringre változtatni, hátha azzal van a baja, de úgyse működött.
2016. máj. 8. 22:11
 2/8 Adam23713 ***** válasza:
Tömbnél nincs .size (). Ahhoz külön változó kénne neked. Használod a vectort. std::vector <std::string> tomb, vagy int esetén std::vector <int> tomb
2016. máj. 8. 22:16
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:

a sizeof operátort kell használnod. ez visszaadja a tömb méretét byte-okban. ezt elosztod a tömb egyik elemének méretével, amit ugyanígy kapsz meg.


egyébként első találat a Google-n a "c++ array size"-ra keresve:

[link]

2016. máj. 8. 22:21
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:
100%

Mert a C-stílusú tömbök nem objektumok, így nincsenek tulajdonságai és metódusai sem, éppen ezért nem megy a .size(). Ha ilyen tömböket akarsz használni, neked kell nyilvántartanod a tömböd elemszámát:

const int Length = 4;

string szam[Length];

//A Length tartalmazza a tömb elemeinek számát.


Használhatsz ún. kollekciókat. Ha pontosak a fél perces Google-keresésből szült ismereteim, akkor az így működik:

std::vector<string> szam;

szam.push_back(egyes);

//...

És ennek lesz olyanja, hogy szam.size(), mivel ez már objektum, az std::vector<T> példánya.


Amúgy biztos, hogy jól futottál neki ennek a feladatnak?

2016. máj. 8. 22:23
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

1. Javasolnám, hogy a továbbiakban ha kódot szúrsz be, azt valamilyen kódmegosztó oldallal - pastebin, pastie, stb... - tedd, rendesen indentálva a kódot, mert így nehezebb kibogozni a dolgot.


2. Még a ciklus lefutása előtt kell a maximum értékének megadni a tömb első elemét.


3. Az i értékét akkor is növelni kell, ha az aktuális elem kisebb vagy egyenlő mint a maximum érték, szóval vedd ki a feltételből.


4. Mint előttem elmondták:

* vagy C-stílusú sizeof(szam) / sizeof(*szam) használatával

* vagy vector segedelmével


Szóval C-stílusban például így:

[link]


vagy vector - ahol már van size() - használatával:

[link]

2016. máj. 8. 22:43
Hasznos számodra ez a válasz?
 6/8 SimkoL ***** válasza:
60%
Ha marad a tömb, akkor legelőször is helyes méret: int szam[5];
2016. máj. 8. 22:46
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

Hopp, jó hogy valaki erre is figyel, szóval:

[link]

2016. máj. 8. 22:51
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

C++17 -től van std::size ami megy sima tömbökre is. (VS15 -ben implementálva van a C++17 standard template library része, többinél nem tudom)


[link]

2016. máj. 9. 04:59
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!