ďťż

Ładny brzuch

Piszę funkcję, która jako argument powinna przyjmować tablicę typu int. Chcę jednak, żeby można było wywołać funkcję bez podawania jako argumentu w.w. tablicy. Doszedłem do wniosku, że dobrym pomysłem będzie zastosowanie argumentu domyślnego. W pliku nagłówkowym zrobiłem następujący zapis:

void funkcja(int id[9]={1,2,3,4,7,10,11,15});

Natomiast cała funkcja wygląda następująco:
void funkcja(int id[9]={1,2,3,4,7,10,11,15}) { //kod funkcji }

Kompilator wyrzuca mi następujący błąd:
E2293 ) expected
Wydaje mi się, że nawiasy są dobrze pozamykane, ale być może się myle. Będę bardzo wdzięczny, jeśli ktoś mi to wytłumaczy :huh:



nieznam sie dobrze na programowaniu ale powinno byc chyba int funkcja... a nie void funkcja... ;)

I mozna by dac tablice jako zmnienna globalna i potem dac ja w funkcji.
Użytkownik neo182 edytował ten post 15 kwiecień 2005, 20:26

nieznam sie dobrze na programowaniu ale powinno byc chyba int funkcja... a nie void funkcja...  ;)
ale jak dam int funkcja to wtedy będę zwracał (nie, nie ja ;)) typ int. A ja nie chcę, żeby funkcja coś zwracała, tylko, żeby przyjęła argumenty i np. je wypisała.

I mozna by dac tablice jako zmnienna globalna i potem dac ja w funkcji.
ta zmienna (id[9]) to jest argument funkcji. Ja chcę przypisać tej tablicy domyślne wartości w momencie wywoływania, o ile nie zrobi tego wcześniej osoba korzystająca z tej funkcji (np. ja ;))....
W każdym razie dzięki, że próbowałeś.
Sądzę, że mój błąd jest raczej książkowy. Pewnie gdzieś coś w niewłaściwy sposób zrobiłem. Niestety - nie wiem co....

W C/C++ tablice nie sa przekazywane jako tablice a wylacznie jako wskaznik.

Mowiac po ludzku (i w duzym uproszczeniu) tablica moze byc reprezentowana przez wskaznik, wskaznik przez tablice => tablica i wskaznik moga byc zamienne.

Wskaznik to zmienna 4 bajtowa (w 32 bitowych OS, 8 bajtow w 64 bit). Tablica to pewnien obszar pamieci.

Do rzeczy - jako ze do funkcji tablice mozesz przekazac wylacznie jako wskaznik do niej - nie mozna przekazac jej jako "cialo" (blok pamieci).

Z tego wzgledu zapis jaki dales jest bledny.

Przekazanie do funkcji tutaj bylo by np jako int *tablica. I to jest poprawne - wartosc domyslna mozesz zastosowac wylacznie do typu argumentu - a poniewaz tutaj to wskaznik wiec taka wartoscia domyslna moze byc wylacznie "wskaznik na cos" - np pusty wskaznik (NULL).

Ufff... mam nadzieje ze pomoglem :)

Pozdr.
st3tc



No jakoś to zrobiłem na około. W pliku nagłówkowym jescze przed class{} wstawiłem coś takiego:
int domID[9]={0,1,2,3,4,7,10,11,15};
A w tym samym pliku nagłówkowym w zrobiłem taką deklaracje funkcji:
void Pokaz(int id[9]=domID);
Program się kompiluje, wszystko działa, ale przy kompilacji mam takie ostrzeżenie:
[Linker Warning] Public symbol '_domID' defined in both module D:\(...)GLOWNEKOD.OBJ and D:\(...)DODAJKOD.OBJ.
Nie wiem czy się tym przejmować, ale zawsze ostrzeżenie to ostrzeżnie. Gdyby ktoś mógł na to rzucić okiem, to byłoby fajnie ;)


Program się kompiluje, wszystko działa, ale przy kompilacji mam takie ostrzeżenie:
[Linker Warning] Public symbol '_domID' defined in both module D:\(...)GLOWNEKOD.OBJ and D:\(...)DODAJKOD.OBJ.
Nie wiem czy się tym przejmować, ale zawsze ostrzeżenie to ostrzeżnie. Gdyby ktoś mógł na to rzucić okiem, to byłoby fajnie ;)

OK, dzieki! :)

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