Witam.
Tworzę rodzinę klas Wyjątków. Każdy wyjątek to oddzielna podklasa (taki wymóg).
Każda klasa posiada stringa z linią, w której wystąpił błąd i stringa z informacją dla użytkownika co jest nie tak.
Chciałbym móc zainicjalizować stringa z informacją już w ciele klasy, niestety kompilator krzyczy, że robię to niezgodnie z ISO C++
co powinienem zmienić?
#ifndef WYJATKI_H
#define WYJATKI_H
#include <string>
using namespace std;
class Exc
{
protected:
string blednaLinia;
// string opisBledu;
Exc(){cout<<"Error! ";}
};
class Exc1 : public Exc
{
string opisBledu = "Nie podano pierwszego argumentu dyrektywy #define!\n";
Exc1(string blednaLinia) : blednaLinia(blednaLinia)
{
cout<<opisBledu<<"W linii: "<<blednaLinia;
}
}
class Exc2 : public Exc
{
opisBledu = "Nie podano drugiego argumentu dyrektywy #define!\n";
Exc2(string blednaLinia) : blednaLinia(blednaLinia)
{
cout<<opisBledu<<"W linii: "<<blednaLinia;
}
}
class Exc3 : public Exc
{
opisBledu = "Podano nadmiarowy argument dyrektywy #undef!\n";
Exc1(string blednaLinia) : blednaLinia(blednaLinia)
{
cout<<opisBledu<<"W linii: "<<blednaLinia;
}
}
#endif
16|error: making 'opisBledu' static|
16|error: invalid in-class initialization of static data member of non-integral type 'std::string'|
Dlaczego Exc1 niby nie posiada pola "blednaLinia" skoro dziedziczy je po Exc ?
In constructor 'Exc1::Exc1(std::string)':|
17|error: class 'Exc1' does not have any field named 'blednaLinia'|