Prosím pekne o jednu radu, som totally beginner a dostal som za úlohu vytvoriť triedu a v nej nejaké objekty + konštruktor a deštruktor. Ale mám jeden problém, ktorý sa viacerým bude zdať primitívny, ale ja sa s tým už trápim 4 hodiny a nedokážem to vyriešiť.
Potrebujem uložiť 5 reťazcov, tak aby som k nim mohol pristupovať tým spôsobom, že
Kód:
premenna[0] = "1. reťazec"
premenna[1] = "2. reťazec"
premenna[2] = "3. reťazec"
premenna[3] = "4. reťazec"
premenna[4] = "5. reťazec"
respektive:
Kód:
a=1
premenna[a] = "2. reťazec"
Pomocou string to síce ide, ale pri kompilovaní vypisuje varovanie a stáva sa, že program po spustení spadne. Takže to nepripadá v úvahu.
Skúšal som to pomocou struct:
Kód:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
typedef unsigned short int USI;
struct Osoby_template
{
string MenoOsoby;
};
.
.
.
int main()
{
Osoby_template Osoby[5];
Osoby[1].MenoOsoby = "Dezko";..............
No a tu je pes zakopaný, aj napriek tomu, že premenná
Osoby by mala byť globálna, nefunguje vo funkcii, ktorá je volaná z inej funkcie, ktorá je volaná z
int Main(), v tej funkcii vypisuje, že tam nie je definovaná.
Ja už vôbec netuším, ako to mám riešiť - som v koncoch.
Radšej sem dám celý ten kód:
(prosím, nesmejte sa mi, ja viem, že sa to dá napísať aj 50x lepšie, ale som nováčik, je to môj prvý program v C++)
Kód:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
typedef unsigned short int USI;
struct Osoby_template
{
string MenoOsoby;
};
/*struct template_Ludia Osoby[]=
{
{"Dezko"},
{"Janko"},
{"Jozko"},
{"Mirko"},
{"Petko"}
};*/
//enum Osoby{Dezko=1,Janko,Jozko,Mirko,Petko};
USI gVek, gVyska, gVaha;
class Osoba
{
public:
Osoba();
Osoba(USI defaultVek, USI defaultVyska, USI defaultVaha);
~Osoba();
USI getVek();
void setVek(USI v_Vek);
USI getVyska();
void setVyska(USI v_Vyska);
USI getVaha();
void setVaha(USI v_Vaha);
private:
USI v_Vek;
USI v_Vyska;
USI v_Vaha;
};
//Zadefinovanie funkcii
USI Osoba::getVek()
{
return v_Vek;
}
void Osoba::setVek(USI Vek)
{
v_Vek = Vek;
return;
}
USI Osoba::getVyska()
{
return v_Vyska;
}
void Osoba::setVyska(USI Vyska)
{
v_Vyska = Vyska;
return;
}
USI Osoba::getVaha()
{
return v_Vaha;
}
void Osoba::setVaha(USI Vaha)
{
v_Vaha = Vaha;
return;
}
//Zadefinovanie konstruktorov a destruktora
Osoba::Osoba()
{
}
Osoba::Osoba(USI defaultVek, USI defaultVyska, USI defaultVaha)
{
v_Vek = defaultVek;
v_Vyska = defaultVyska;
v_Vaha = defaultVaha;
cout << "Pouzity konstruktor.";
}
Osoba::~Osoba()
{
}
//Zadefinovanie funkcii potrebnych pre vykonanie hlavneho programu
void fVypisMenu(USI ktore)
{
system("echo off | cls");
switch (ktore)
{
case 1:
cout << "Hlavne menu:\n\n1. Pridaj polozku\n2. Zobraz uplny zoznam\n3. Zmaz cely zoznam\n\n0 - Koniec\n\nZadaj 0-3: ";
break;
case 2:
cout << "Vytvor objekt:\n\n1. Dezko\n2. Janko\n3. Jozko\n4. Mirko\n5. Petko\n\n0. Koniec.\n\nZadaj 0-5: ";
break;
default:
cout << "FATAL ERROR!!! Take menu neexistuje!";
}
return;
}
USI fSelectMenu(USI to, USI ktoreMenu)
{
USI SelectMenu = 255;
do
{
fVypisMenu(ktoreMenu);
cin >> SelectMenu;
} while (SelectMenu > to);
return SelectMenu;
}
USI fVypytajUdaje(USI ktoraOsoba)
{
cout << "\nZadaj vek osoby " << Osoby[ktoraOsoba] << ": ";
cin >> gVek;
cout << "\nZadaj vysku osoby " << Osoby[ktoraOsoba] << ": ";
cin >> gVyska;
cout << "\nZadaj vahu osoby " << Osoby[ktoraOsoba] << ": ";
cin >> gVaha;
return 0;
}
USI fPridajPolozku(USI ktoryObjekt)
{
switch (ktoryObjekt)
{
case 1:
fVypytajUdaje(ktoryObjekt);
Osoba Dezko(gVek, gVyska, gVaha);
}
return 0;
}
int main()
{
Osoby_template Osoby[5];
Osoby[1].MenoOsoby = "Dezko";
USI PolozkaMenu = fSelectMenu(3, 1); //3 - polozky menu do 3 vratane, 1 - ktore menu
switch (PolozkaMenu)
{
case 1:
PolozkaMenu = fSelectMenu(5, 2); //3 - polozky menu do 5 vratane, 2 - ktore menu
fPridajPolozku(PolozkaMenu);
system("pause >nul");
break;
/*case 2:
break;
case 3:
break;
*/
case 0:
break;
}
return 0;
}
Nefunguje to vo funkcii
USI fVypytajUdaje(USI ktoraOsoba)
Za odpoveď vopred ďakujem.
P.S.: A ešte sem dám zadanie úlohy, ktorú som asi nepochopil
Deklarujte triedu s názvom Osoba, ktorá má nasledovné súkromné členské premenné: vek, výška, hmotnosť.
Zvoľte vhodný dátový typ pre členské premenné. Môžete pridať aj ďalšie.
Definujte verejné prístupové funkcie pre čítanie a zápis týchto údajov.
Trieda bude obsahovať štandardný konštruktor a vlastný konštruktor s parametrami.
Definujte aspoň jednu ďalšiu členskú funkciu. Triedu použite v programe,
ktorý umožní spracovať krátky zoznam objektov tejto triedy
(pole pevnej veľkosti, alebo zoznam typu vector, príp. iné).
Program bude vykonávať funkcie ako: pridať záznam, zobraziť všetky záznamy, zmazať všetky záznamy,
koniec programu, a to prostredníctvom opakovane zobrazovaného textového menu.
So zoznamom sa bude dať pracovať počas behu programu.
Voliteľným rozšírením je uloženie zoznamu do súboru a jeho načítanie zo súboru.