C++, mi lehet a hiba?
Nemrég kezdtem el tanulni a C++ nyelvet, de valamit nem értek listákkal kapcsolatban. Minden videóban amit megnéztem megfelelően működött nekem nem. Arról beszélek, amikor készítek egy listát pl(string nevek[x]) és az x helyére nem számot írok, hanem egy változót ami egy számot tartalmaz. Itt egy példa.
#include <iostream>
using namespace std;
int main()
{
int db = 10;
string nevek[db];
}
Mindig aláhúzza, hogy "db" és írja "failure was caused by a read of a variable outside its lifetime".
Deklarálni így nem lehet, ott konkrét számot kell megadni. A következőképpen megoldható a dolog:
string nevek = new string[10];
A standard szerint a fordítónak fordítási idő során ismerni kell a tömb méretét, így jó ha "konkrétan" (literálként) adod meg a méretet, ahogy az első válaszoló írta.
Emellett az is működik, ha a "db" változódat konstansként deklarálod:
const int db = 10;
Ettől függetlenül, bizonyos fordítóknál működhet a példád.
Dinamikus foglalással, így:
string nevek = new string[db];
A programozási nyelvek egyes implementációi és verziói között lehetnek nagy különbségek. Nálam a fenti kód simán lefordult, még csak figyelmeztetést sem kaptam. (G++ 7.5.0) Gondolom, ami videót néztél, abban is hasonló fordítót használnak, te pedig valami mást, ami ezt (még) nem támogatja. (Talán Visual Studiot? Az szokott szembemenni a szabványokkal és szokásokkal.)
"De ha konkrét számot kell megadni, akkor pl. egy txt beolvasásnál amit egy listába szeretnék kiírni, hogyan határozom meg a méretet?"
Sehogy. Vagy dinamikusan foglalod le a memóriát, vagy áttervezed az algoritmust. (Vagy előtte bináris módban végigszaladsz a fájlon, és megszámolod, hogy hány sortörés-karakter van benne.) Nem is biztos, hogy bölcs dolog egy fájlt egy az egyben, korlátok és ellenőrzés nélkül berántani a memóriába.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!