Ahoj lidičky.
Mám menší problém.Ve třídě jsem si vytvořil řetězec string.Problém nastává,když chci do řetězce něco zapsat,to pak program normálně spadne.Při tom s int mi to v pohodě jede.Je to tím že string je taky třída?Prosím poraďte.
Fórum › C / C++
String ve třídě
To tmi :
Deklarace:
class subject{
int nuos;
int utrp;
string naos;
string zkr;
public:
string get_naos(){return naos;}
void set_naos(string n){naos=n;}
string get_zkr(){return zkr;}
void set_zkr(string z){zkr=z;}
int get_nuos(){return nuos;}
void set_nuos(int num){nuos=num;}
int get_utrp(){return utrp;}
void set_utrp(int ut){
if(ut>10){
ut=10;
}
utrp=ut;
}
Přístup:
for(int i=1;true;i++){
system("cls");
subject pred[i];
pred[i].set_nuos(i);
string na;
string zk;
int u;
cout<<"Zadej uplny nazev predmetu "<<i<<" :\n\n";
cin>>na;
cout<<"\n\n\nZadej zkratku pro tento predmet:\n\n";
cin>>zk;
cout<<"\n\n\nZadej utrpeni pro tento predmet(cele cislo v rozsahu 1-10):\n\n";
cin>>u;
pred[i].set_naos(na);
pred[i].set_zkr(zk);
pred[i].set_utrp(u);
Yes_no_1:cout<<"\aVlozit dalsi predmet?\n\n >ANO< * >NE<\n{?}\b\b";
Na to "Ano-Ne" ani nedojde,ale když v kódu nechám pouze metody,které nastavují int, tak program jede dál.
Vydím tam jen jednu chybu a ta není fatální, no možná je to horší...:
subject pred[i]; - To není správně vytvořené pole (A chtěl jsi vůbec vytvářet pole?), lepší je subject* pred = new subject[i], udělá to totéž, ale mnoohem čistěji.
No a teď už by ti mohlo být jasné, kde by měla být chyba. V následujících řádcích několikrát voláš pred[i], kde pole pred je však indexováno v intervalu <0, i-1>, takže voláš prvek, který v tom poli není, saháš do nepovolené paměti a KABOOM.
Měj se.
No jo,to jsem si neuvědomil,ale když teď nad tím přemíšlím,tak to [i] tam nemá co dělat.
Ale teď mimo mísu,existuje funkce na principu
ofstream ofs();
ale aby argument určující jméno výsledného souboru NEBYL typu const char*,ale aby mohl být ovlivněn chodem programu?
Díky
To, že je parametr té funkce typu const char* ještě neznamená, že jí musíš předávat ukazatel na konstantu.
To jen říká, že obsah toho ukazatele nebude měněn, vpodstatě to, že parametr bude použitý jen pro čtení.
Takže tomu můžeš předat libovolný Cčkovský řetězec typu char* případně použít metodu třídy string c_str pro získání konstantního ukazatele na 1. znak dat ve stringu.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Kontrola zda string obsahuje jiný string — založil beachboy
String to hex ebo Byte()"string" — založil Roman Uherek
WinProc ve třídě — založil ingiraxo
Přístup ke třídě — založil Tom
Třída ve třídě, C++ — založil Luu
Moderátoři diskuze