asia97 Temat założony przez niniejszego użytkownika |
Problem z deklaracją. » 2011-07-08 19:43:43 Witam :) w ramach ćwiczeń napisałam mały program. #include <iostream> #include <cstdlib> #include <ctime>
int losujLiczby( int tab[], int ile, int min ) { int licznik; int cis; do { cis =( rand() % ile ) + min; licznik++; } while( licznik < 5 ); return cis; }
void wypiszLiczby( int tablica[], int i ) { for( int indeks = 0; indeks < i; indeks++ ) std::cout << tablica[ indeks ] << std::endl; }
int main() { srand( time( NULL ) ); int los[ 4 ]; losujLiczby( tab, 4, 5, 15 ); wypiszLiczby( los, 4 ); return 0; }
Kiedy chcę go skompilować pisze 'error: 'tab' was not declared in this scope' Dosyć często tak mam. O co chodzi ? :) |
|
szyx_yankez |
» 2011-07-08 19:49:27 Odwołujesz się do tablicy której nie zdeklarowałaś.
Rozwiązanie: zdeklarowanie zmiennej/tablicy zmiennych, przed ich pierwszym użyciem/odwołaniem. |
|
Savail |
» 2011-07-08 20:07:28 Zmienna int tab, której użyłaś jako argument w funkcji istnieje tylko w obrębie tej funkcji więc poza nią już nie możesz jej używać ^^ Edit: Dzięki za poprawę DejaVu, zawsze mam problemy z teorią :P |
|
DejaVu |
» 2011-07-08 20:08:32 Funkcja posiada argumenty.
Szablon posiada parametry.
W jej przypadku mowa jest o argumentach. |
|
asia97 Temat założony przez niniejszego użytkownika |
» 2011-07-08 20:21:50 Dopisałam int tab[ 4 ]; i teraz pisze, że jest za dużo argumentów w funkcji losujLiczby. Co robię źle ? |
|
ison |
» 2011-07-08 20:41:10 int main() { srand( time( NULL ) ); int los[ 4 ]; losujLiczby( tab, 4, 5, 15 ); wypiszLiczby( los, 4 ); return 0; }
int losujLiczby( int tab[], int ile, int min )
|
ta funkcja przyjmuje 3 argumenty losujLiczby( tab, 4, 5, 15 );
|
a tu próbujesz jej przekazać 4 w funkcji losujLiczby zwracasz tylko 1 zmienną a powinnaś raczej podstawiać wyniki do tablicy (wtedy funkcja nie powinna nic zwracać czyli mieć typ void) int losujLiczby( int tab[], int ile, int min )
|
zabrakło jeszcze argumentu max ;) cis =( rand() % ile ) + min;
|
zamiast podstawiać do cis powinnaś raczej podstawiać do konkretnych elementów tablicy (w końcu po to ją chyba przekazujesz?) tej zmiennej używasz do iteracji więc powinna być wyzerowana: raczej to by było chyba na tyle :) |
|
asia97 Temat założony przez niniejszego użytkownika |
» 2011-07-08 20:55:29 Dziękuję panom bardzo za pomoc :) Jeszcze tylko jedno pytanie odnośnie 'zamiast podstawiać do cis powinnaś raczej podstawiać do konkretnych elementów tablicy (w końcu po to ją chyba przekazujesz?)'. O co dokładnie chodzi ? Przepraszam, że tak ciągle pytam, ale jestem początkująca :)
Edit Zmieniłam na void, ale wylosowane liczby są jakieś gigantyczne. |
|
ison |
» 2011-07-08 20:57:32 przekazujesz int tab[] w argumencie czyli wskaźnik na tablicę, więc nie ma potrzeby zwracania niczego (tak samo jak to zrobiłaś w funkcji wypiszLiczby) void losujLiczby( int tab[], int ile, int min, int max ) { int licznik = 0; do { tab[ licznik ] = wylosowana wartosc; licznik++; } while( licznik < ile ); }
|
|
« 1 » 2 |