Kezdőoldal » Számítástechnika » Programozás » C++, mi lehet a hiba?

C++, mi lehet a hiba?

Figyelt kérdés

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



2021. máj. 24. 15:32
 1/8 anonim ***** válasza:
80%

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];

2021. máj. 24. 15:36
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
89%

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.

2021. máj. 24. 15:51
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:
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?
2021. máj. 24. 16:16
 4/8 anonim ***** válasza:
54%

Dinamikus foglalással, így:

string nevek = new string[db];

2021. máj. 24. 16:24
Hasznos számodra ez a válasz?
 5/8 A kérdező kommentje:
Nekem ezt is aláhúzza
2021. máj. 24. 16:32
 6/8 anonim ***** válasza:
100%
Ezek nem listák, hanem tömbök. Használj inkább vektort, azt nagyon egyszerűen át tudod méretezni.
2021. máj. 24. 16:40
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

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.

2021. máj. 24. 18:04
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

Kérdező, ezt olvasd át.

[link]

2021. máj. 25. 13:44
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!