Lista inicjalizacyjna w C++

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???

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?

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