C++ miért nem engedi a . Size () -ot használni a tömb méretének kifejezésekor?
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?
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:
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?
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:
vagy vector - ahol már van size() - használatával:
Hopp, jó hogy valaki erre is figyel, szóval:
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)
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!