Miért problémázik a másoló konstruktor?
Mammal::Mammal(const Mammal &rhs): *itsAge(rhs.GetAge()) {
cout <<"Mammal copy Konstruktor \n";
itsAge = new short;
*itsAge = rhs.GetAge();
}
Hibaüzenet:
expected '{' before '*' toke
expected constructor, destructor, or type conversion before '(' token
expected identifier before '*' token
Egyszer benne volt könyvben egy olyan példa ahol így adott értéket egy tagváltozónak.
De ez most mutató és így nem működik.
Pedig jónak kellene lennie.
return new Mammal(*this);
Van egy ilyen kódsor a programban ez létrehoz egy új objektumot dinamikusan a *this paraméterrel és közben meghívódik a másoló konstruktor és a másolókonstruktorban beállítja az életkorát.
*itsAge(rhs.GetAge())
Ez nem működik. A pointert (az itsAge) lehet inicializálni, de amire mutat azt nem, mivel a pointer az adattag, és nem amire mutat. Ráadásul az a pointer ott még nem mutat sehova, hiszen nincs inicializálva, így ha nem lenne szintaxis hiba, akkor is segfault lenne jó eséllyel.
Így inicializáld: itsAge(new short(rhs.GetAge()))
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!