Administratorzy gnysek Opublikowano 17 Czerwca 2009 Administratorzy Udostępnij Opublikowano 17 Czerwca 2009 Mam kolejny problem. W sumie to nie ja, tylko osoba której pomagam, ale mniejsza o to. Mamy pewien program, w którym na początku są dwie struktury, potem kilkanaście funkcji i na koniec main(). Wszystkie funkcje operują na podanej strukturze. Facet zażyczył sobie, aby wywalić wszystkie funkcje do innych plików i zrobić makefile. Ok, zrobiłem to, ale jest problem ze strukturami, bo w plikach .h daję takie coś extern struct costam{ int zmienna; char tekst[20]; }; I przy kompilacji wywala mi warningi, ale bez tego nie kompiluje sie wcale. Jak usunę ją całkiem, to wtedy wywala błąd, że nieznana zmienna. Dodam, że kompiluję pod linuxem, chociaż to nie ma znaczenia, bo chodzi raczej o treść tego pliku *.h, żeby mi się skompilował. Przyznaję, nie uważałem na wykładzie :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dragon Opublikowano 18 Czerwca 2009 Udostępnij Opublikowano 18 Czerwca 2009 Nie wiem czy pomogę.. ale z tego co wiem to nie można dać średnika po tym } usuń to i spróbuj... Bo w mojej książce o C++ w każdym przykładzie niema tego średnika... Mam nadzieję że pomogłem... :unsure: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 18 Czerwca 2009 Udostępnij Opublikowano 18 Czerwca 2009 po definicji struktury czy klasy musi być średnik. Zapodaj gnysku co za warningi wywala, wklej tu jak możesz ich treść. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kryniak Opublikowano 18 Czerwca 2009 Udostępnij Opublikowano 18 Czerwca 2009 test.c #include <stdio.h> #include "test.h" int main() { struct costam test; test.zmienna=42; test.tekst="motocykl"; printf("%d, %s",test.zmienna,test.tekst); return 0; } test.h struct costam { int zmienna; char *tekst; }; bump Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 18 Czerwca 2009 Udostępnij Opublikowano 18 Czerwca 2009 faktycznie, gnysiu miał "structure" zamiast "struct" :0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 18 Czerwca 2009 Autor Administratorzy Udostępnij Opublikowano 18 Czerwca 2009 szukanie.h:9: warning: useless keyword or type name in empty declaration gcc -c wstawianie.c Chodzi o to, że pliki mam takie: szukanie.c, wstawienie.c, main.c, oraz te same w formie *.h W main.c jest definicja tej struktury, ale te pozostałe dwa pliki też wykorzystują tą strukturę, a bez jej definicji się nie kompilują. Więc dałem extern struct no i przy kompilacji wywala błąd widoczny wyżej. szukanie.h dla przykładu jest taki: #ifndef SZUKANIE_H #define SZUKANIE_H extern struct kontakt { char nazwisko[20]; char imie[20]; int numer; }; extern int ilosc; extern struct kontakt *wykaz[100]; void drukujJeden (int Jaki); void drukuj(); void szukajKoniec(int ile); void szukajNazwiska(); void szukajImienia(); void szukajNumeru(); void usun(int jaki); void znajdzUsun(); #endif @Tiger - to nie jest C++ a C, chyba napisałem? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 18 Czerwca 2009 Udostępnij Opublikowano 18 Czerwca 2009 a to nie lepiej Ci zrobic definicje tej struktury w naglowku? czy to jakis wymog ze musi byc poza naglowkiem? EDIT: a jednak masz w naglowku. hmm... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 18 Czerwca 2009 Autor Administratorzy Udostępnij Opublikowano 18 Czerwca 2009 no tak, ale definicja musi być w 3 plikach wtedy i to mi się nie chciało dobrze kompilować potem :/ Zobacz wyżej jak wyglada *.h Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 18 Czerwca 2009 Udostępnij Opublikowano 18 Czerwca 2009 moze to glupie ale pierw dla pewnosci zamien to: extern struct kontakt *wykaz[100]; na to: extern struct kontakt { *wykaz[100]; }; nawet jesli sie mysli ze to nie to, to jednak warto sprawdzic, bo diabel tkwi w szczegolach :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 18 Czerwca 2009 Autor Administratorzy Udostępnij Opublikowano 18 Czerwca 2009 nie bo wykaz to tablica wskaźników na strukturę kontakt, powiedzmy, że to jest równoważne: int zmienna; struct kontakt zmienna; int i struct kontakt, to typy :) a linia 9 z błędu to }; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 18 Czerwca 2009 Udostępnij Opublikowano 18 Czerwca 2009 int zmienna; struct kontakt zmienna; Równoważne? :0 znaczy sie że w ten sposób: struct kontakt zmienna; chcesz deklarować zmienną typu kontakt czy strukture? :0 EDIT: Wal na gg, bo raz ze szybciej a dwa ze sie domyslam co zle :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kryniak Opublikowano 18 Czerwca 2009 Udostępnij Opublikowano 18 Czerwca 2009 Musisz do pozostałych plików dołączyć plik nagłówkowy deklaracji typu struktury. Dawanie extern struct jest tak samo bezsensowne, jak dawanie extern int. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi