Mi a probléma ebben a C++ kódban?
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?
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
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:
Amúgy továbbra is ugyan az a hiba üzenet.
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)
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.
Pointer változót és tömböt mindig inicializálj. Kéretik itt átolvasni az első választ:
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!