Üdv!
Úgy tűnik, ez nem az én napom... :(
A lentebbire már rájöttem, miért vagyok hülye, viszont valami még mindig problémás. A típusok már elméletileg stimmelnek, le is fordul, viszont a következő helyen probléma van:
void ReadFromKeyboard(vector<string> &t)
{
string name;
cin >> name;
while(name!="::quit") { t.push_back(name); cin >> name; }
cout << atoi(t[1].c_str());
}
A t vektor így fest: vector<string> t;
A ciklus szépen végigszalad, az utána következő kövér sor viszont szegmens hibát dob. Valaki legyen szíves, magyarázza el nekem, hogy miért?
ez a hülyeség már megoldva:
Biztosan az agyamra ment valami, és meghülyültem, de ezt nagyon nem értem... Adott egy C++ program, abban a következő függvény ( t a mainben létrehozva: vector t; ):
bool valami(const vector t);
bool valami(const vector t)
{
bool l = false;
bool feltetel = false;
int i = 0;
do { if ( atoi(t[i]) == 0 ) { feltetel = true; } ... } while( (atoi(t[i]) >= 0) && (i < (int)t.size()) );
return l;
}
a fordító a kövérített részre panaszkodja, hogy:
error: cannot convert ‘const std::basic_string, std::allocator >’ to ‘const char*’ for argument ‘1’ to ‘int atoi(const char*)’
miért is? és hogy kéne javítani? köszi a segítséget!
- 1993 megtekintés
Hozzászólások
a ... helyén természetesen a megfelelő helyen "l" és "feltetel" is kap értéket.
:: by BRI.
:: config :: Acer TravelMate // Ubuntu Intrepid
:: tothab [a] gmail [pötty] kom
:: black rose immortal's weblog
- A hozzászóláshoz be kell jelentkezni
printf("%s",t[0]); pedig nem problémázik. :(
:: by BRI.
:: config :: Acer TravelMate // Ubuntu Intrepid
:: tothab [a] gmail [pötty] kom
:: black rose immortal's weblog
- A hozzászóláshoz be kell jelentkezni
Ha elárulnád a t vectorod deklarációját < és > helyett <-t és >-t használva, az minden bizonnyal sokat lendítene a dolgon.
- A hozzászóláshoz be kell jelentkezni
megoldottam, csak szimplán hülye vagyok.
:: by BRI.
:: config :: Acer TravelMate // Ubuntu Intrepid
:: tothab [a] gmail [pötty] kom
:: black rose immortal's weblog
- A hozzászóláshoz be kell jelentkezni
a válasz:
mert atoi const char-t vár, és stringet adok neki
t[i].c_str() megoldotta. bocsi az elmezavarért...
:: by BRI.
:: config :: Acer TravelMate // Ubuntu Intrepid
:: tothab [a] gmail [pötty] kom
:: black rose immortal's weblog
- A hozzászóláshoz be kell jelentkezni
az at megoldás lehet a problémára?
ha az összes t[i]-t átírom t.at(i)-re, arra már szegmens hiba helyett ezt üzeni:
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
Aborted
:: by BRI.
:: config :: Acer TravelMate // Ubuntu Intrepid
:: tothab [a] gmail [pötty] kom
:: black rose immortal's weblog
- A hozzászóláshoz be kell jelentkezni
A megoldás a problémára az, hogy ha 1 db stringet írsz bele, akkor a vectornak csak a 0 indexű eleme fog létezni, az 1 indexű nem (mert az csak akkor lenne, ha két db stringet írnál bele), ezért szépen kihivatkozol a vectorból.
Próbáld meg a cout<<atoi(t.at(0).c_str);-t
- A hozzászóláshoz be kell jelentkezni