| 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 |