Witam!
Podczas tworzenia obiektu klasy przypisałem mu zmienną typu int jako nazwę, i później odwołuję się do tego obiektu poprzez tą zmienną, np.: lo.info(); (lo to nazwa tej zmiennej). Zmienna tworzona jest w klasie przez: static int lo = 1; (użyłem static, ponieważ wyczytałem, że wtedy wartość zmiennej będzie wspólna pomiędzy wszystkimi obiektami tej klasy)
Przy kompilacji otrzymuję błąd:
error C2864: 'osoba::lo': a static data member with an in-class initializer must have non-volatile const integral type or be specified as 'inline'
note: type is 'int'
Mam też coś takiego w funkcji main:
switch (os)
{
case 1:
osoba lo;
lo.dodaj();
break;
case 2:
osoba::usun();
break;
case 3:
osoba::wypisz();
break;
case 4:
lo.info();
break;
case 5:
osb = 1;
break;
}
A przy kompilacji dostaję coś takiego:
error C2360: initialization of 'lo' is skipped by 'case' label
note: see declaration of 'lo'
W outpucie kompilatora pojawia się to 4 razy i te 4 razy odwołuje się do linijek z czterema ostatnimi case-ami.
EDIT: [Zmieniłem komunikaty błędu na te z angielskiego kompilatora]
class osoba
{
public:
string imie, nazwisko, adres;
int wiek;
void dodaj();
static void usun();
static void wypisz();
static int lo = 1;
static string osoby[101];
void info();
};
void osoba::dodaj()
{
cout << "Podaj imię\n";
cin >> imie;
cout << "\nPodaj nazwisko\n";
cin >> nazwisko;
cout << "\nPodaj adres\n";
cin >> adres;
cout << "\nPodaj wiek\n";
cin >> wiek;
cout << "\nGotowe\n";
osoby[lo] = lo+": "+imie + " " + nazwisko;
lo++;
}
void osoba::usun()
{
int no;
cout << "Podaj numer osoby do usunięcia\n";
cin >> no;
if (no != lo-1) {
string ntemp;
for (int ldel = no; ldel < lo-1; ldel++) {
osoby[ldel] = osoby[ldel + 1];
}
}
lo--;
}
void osoba::wypisz()
{
for (int lwyp = 1; lwyp <= lo-1; lwyp++) {
cout << osoby[lwyp] << endl;
}
}
void osoba::info()
{
int ninfo;
cout << "Podaj numer osoby do wywołania\n";
cin >> ninfo;
cout << "\nImię: " << imie << "\nNazwisko: " << nazwisko << "\nAdres: " << adres << "\nWiek: " << wiek << endl;
}
int main()
{
cout << "Wybieraj:\n 1: Sortowanie\n 2: Osoby\n";
int c;
cin >> c;
cout << endl;
switch (c)
{
case 1:
[Kod dotyczący sortowania, działa i nie używane jest przy nim nic, co jest używane przy klasie osoba]
break;
case 2:
int os;
bool osb;
do {
cout << "Wybieraj:\n 1: Dodaj osobę\n 2: Usuń osobę\n 3: Wyświetl listę osób\n 4: Wyświetl informacje o osobie\n 5: Koniec programu\n";
cin >> os;
cout << endl;
switch (os)
{
case 1:
osoba lo;
lo.dodaj();
break;
case 2:
osoba::usun();
break;
case 3:
osoba::wypisz();
break;
case 4:
lo.info();
break;
case 5:
osb = 1;
break;
}
} while (osb != 1);
break;
}
return 0;
}