Lista inicjalizacyjna w C++

Odpowiedz Nowy wątek
2011-06-18 18:20
ojeja
0

Witam,
Czy ze stringami jest jakiś problem w C++?
Mam

KlasaA{
public:
   KlasaA(){}
   virtual ~KlasaA(){}
   string name;
};
KlasaB: public KlasaA
{
    KlasaB(string name2): name(name2){}; 
   ~KlasaB(){};
};

i kompilator wywala błąd typu:
1>f:\projekt\fg\Klasa.cpp(6) : error C2039: 'name' : is not a member of 'KlasaA'
1> f:\projekt\fg\Klasa.h(8) : see declaration of 'KlasaA'

error C2614: 'KlasaB' : illegal member initialization: 'name' is not a base or member

Doda tylko, że nie pomaga to:
KlasaB(string name2): KlasaA::name(name2){};
ani to:
KlasaB(string name2): KlasaA(), name(name2){};

Bez sensu błąd, Czy to bug visuala???

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26

Pozostało 580 znaków

2011-06-18 18:47
bug
0

Sam jesteś bug Visuala. Zachowanie bardzo sensowne, dla każdej składowej zostaje wywołany konstruktor zgodnie z kolejnością deklaracji składowych w klasie, lista inicjalizacyjna pozwala zastąpić wywołanie konstruktora domyślnego którymś parametrowym. Konstruktory składowych są wołane przed konstruktorem klasy, do której należą, konstruktor rodzica jest wołany przed klasy pochodnej, jak również przed konstruktorami składowych klasy pochodnej. Nie możesz zmienić argumentów konstruktorów składowych klasy bazowej bo ten konstruktor zostanie wywołany przed konstruktorem klasy bazowej, na zasadach obowiązujących w klasie bazowej. Jak to sobie wyobrażasz, konstruktor składowej zostanie wywołany wielokrotnie?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0