ďťż

Ładny brzuch

Tak jak w temacie - przy kompilacji program wywala błąd (patrz na sam dół postu) w linijce gdzie mam "zmienna_intiger = zmienna_string.length".

Oto przykładowy kod w którym występuje problem:

#include <iostream>
#include <string>

int main()
{
std::string strTekst, strTekstPoprawny;
int nDlugosc, nWylosowana;
strTekst = "lokomotywa";
strTekstPoprawny = strTekst;
nDlugosc = strTekst.length;
srand(static_cast<unsigned int>(time(NULL)));
nWylosowana = rand % nDlugosc +1;
std::cout <<strTekst[nWylosowana];
return 0;
}


błąd/błędy:

main.cpp: In function ‘int main()’:
main.cpp:10: error: argument of type ‘size_t (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const’ does not match ‘int’
main.cpp:12: error: invalid operands of types ‘int ()()throw ()’ and ‘int’ to binary ‘operator%’

linijka 10 to: "nDlugosc = strTekst.length;"
linijka 12 to: "nWylosowana = rand % nDlugosc +1;"
nie rozumiem błędu i nie wiem dlaczego on występuje. Jak powinna wyglądać poprawiona wersja tego kodu?
Użytkownik tulio edytował ten post 03 wrzesień 2006, 17:15


Zastąp:
nDlugosc = strTekst.length; ... nWylosowana = rand % nDlugosc +1;
tym:
nDlugosc = strTekst.length(); ... nWylosowana = rand() % nDlugosc +1;
Bo to są wywołania funkcji a nie zmienne.
Użytkownik Konrad_st edytował ten post 03 wrzesień 2006, 17:18
jest tak dlatego że string.length zwraca wartość w typie size_t. Zdaje mi się że musisz rzutować na inta.

dzięki wam - musiałem napisać kilka programów w delphi i się przyzwyczaiłem, że się nie wpisuje () ;)




jest tak dlatego że string.length zwraca wartość w typie size_t. Zdaje mi się że musisz rzutować na inta. Uzupełniając to większość kompilatorów przy wykorzystaniu size_t jako int się nie rzuca... Natomiast VSC++2005 przy takim wykorzystaniu zmiennej ostrzega stosownym warningiem.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •