Kezdőoldal » Számítástechnika » Programozás » Mi a probléma ebben a C++ kódban?

Mi a probléma ebben a C++ kódban?

Figyelt kérdés

class Base {


public:

Base() {

cout << "Base Constructor" << endl;

}

virtual void show() {

cout << "BASE - BASE - BASE" << endl;

}

virtual~Base() {

cout << "Base DELETE" << endl;

}

};



class Child:public Base {


public:

Child() {

cout << "Child Constructor" << endl;

}

void show() {

cout << "CHILD - CHILD - CHILD" << endl;

}

~Child() {

cout << "Child DELETE" << endl;

}

};


class Container {

size_t n;

Base* bases[10];

public:

Container() :n(0) {}


void add(Base* b) {

if (n < 10)

bases[n++] = b;

}


void list() {

for (size_t i = 0; i < n; i++)

bases[i]->show();

}


~Container() {

for (size_t i = 0; i < n; i++)

delete bases[i];

}

};


int main() {

Container bases;

Base b1;

Child c1;


bases.add(&b1);


}



Nem fut le.


"Warning C26495 Variable 'Container::bases' is uninitialized. Always initialize a member variable "



Maximálisan lemásoltam a BMEs diából a kódot, csak más nevet használtam (Event, helyett Base-t írtam).


Mit lehet a probléma?



2020. márc. 23. 18:27
 1/6 anonim ***** válasza:
21%

Biztos hogy nem ez a teljes kód, mert van egy int main return nélkül.

Amúgy annyi a bajod, ahogy írja, hogy nincs inicializálva.

Azaz a mainben

Container bases; helyett

Container bases = new Container();

kellene neked

2020. márc. 23. 18:47
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:

Bocs, de Javára gondoltál a Container bases = new Container(); kóddal?


Ha jól ez értelmetlen C++ban, de kipróbáltam, csak hogy "hátha", mert ötletem sincs mi a hiba.


Itt a kép amit adott:

[link]


Amúgy továbbra is ugyan az a hiba üzenet.

2020. márc. 23. 19:05
 3/6 A kérdező kommentje:

A Container destruktorában van valami hiba szerintem.


Ha azt kitörlöm, akkor eltünik a probléma.


Bár nem tudom elhagyható-e. Hogy így akkor nem hajtja végre a tömbben megalkotott objektumok destruktorát.


Ami nem tudom, hogy itt probléma-e, de ha dinamikusan foglalnék akkor már az lenne.


(Csak ötletelek :D, mert ezen már tegnap óta gondolkozom)

2020. márc. 23. 19:39
 4/6 anonim ***** válasza:
0%

Most hogy mondod, az valóban rossz.

Csak olyat delete-zünk, amit new-val hoztunk létre.

Azonban a Containernek nem adsz át semmi dinamikusat, mind a veremből megy. Már régen volt a prog2 nekem...

Írhatsz privátot, ha elakadsz valahol.

2020. márc. 23. 21:01
Hasznos számodra ez a válasz?
 5/6 anonim ***** válasza:
58%

Pointer változót és tömböt mindig inicializálj. Kéretik itt átolvasni az első választ:

[link]

2020. márc. 23. 21:50
Hasznos számodra ez a válasz?
 6/6 anonim ***** válasza:
65%
A main() függvényben érdemes lenne a 'bases' név helyett mást használni. Ha átneveznéd, akkor nem vinne tévútra a hibaüzenet. Ugyanis nem a main() függvényben lévő 'bases'-zel van gond, hanem a 'Container' osztályod 'bases' adattagjával (nincs inicializálva, a konstruktorában csak az 'n' adattagnak adsz értéket).
2020. márc. 24. 14:05
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!