Skocz do zawartości

Zablokowane [C] *.h i makefile


gnysek

Rekomendowane odpowiedzi

  • Administratorzy

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

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

faktycznie, gnysiu miał "structure" zamiast "struct" :0

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

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

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

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

  • Administratorzy

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

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

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...