Typedef, a moduł programu

0

Witam
Piszę na zajęcia program obsługujący przetwarzanie obrazów. Nie będę za bardzo wdawał się w szczegóły, bo moje pytanie dotyczy samych deklaracji. Mianowicie: program podzielony jest na cztery pliki: komunikacja.h, komunikacja.c, funkcje.h, funkcje.c . Plik komunikacja.c zawiera funkcje typu wczytaj, zapisz do pliku itp, komunikacja.h zawiera nagłówki funkcji. Podobnie plik funkcje.c zawiera ciała funkcji przetwarzających obrazki, zaś funkcje.h zawiara ich nagłówki. W programie jest struktura określona jako

typedef struct {
    int wymx, wymy, szarosci;
    int **piksele;
} t_obraz;

która przechowuje mój obraz. I teraz tak. W pliku komunikacja.h mam np deklarację:

int maski(t_obraz *obraz1);

Jest to funkcja do której wysyłam cały obrazek i ona coś z nim robi. Żeby kompilator nie krzyczał na mnie, dokłądnie wygląda to tak:

typedef struct {
    int wymx, wymy, szarosci;
    int **piksele;
} t_obraz;

int maski(t_obraz *obraz1);

W przypadku innego zapisu kompilator wyrzuca błędy o nieznajomości typu t_obraz.

Tak czy inaczej. problem pojawia się, gdy w pliku funkcje.h pojawia mi się deklaracja typu:

int maskam(t_obraz *obraz1, int maska[][3]);

(Maskam to inna funkcja niż maski)
Kompilator wyświetla komunikat o nieznajomości typu t_obraz. Wpisanie:

typedef struct {
    int wymx, wymy, szarosci;
    int **piksele;
} t_obraz;

int maskam(t_obraz *obraz1, int maska[][3]);

wyświetla masę komunikatów o błędach. Moje pytanie brzmi - w którym miejscu umieścić deklaracji t_obraz, żeby każda kolejna deklaracja funkcji w dowolnym pliku wiedziała co to jest ten t_obraz?

Pozdrawiam

0

wyświetla masę komunikatów o błędach.

Jakich błędów? Zwykle najszybciej pomagają namierzyć błąd.

Nic nie jest napisane nt include w plikach .c i możliwe, że nie masz dodanych plików nagłówkowych w odpowiednich miejscach.

Podzieliłbym ten kod na mniejsze i czytelniejsze fragmenty (pliki obsługujące obraz, niech obsługują tylko obraz, komunikacja osobno, funkcje dodatkowe też
można jakoś sensownie podzielić).

0

Dobra, problem został rozwiązany. Okazało się że jednym pliku źródłowym był deklaracje

#include "komunikacja.h"
#include "funkcje.h"

A w drugim

#include "funkcje.h"
#include "komunikacja.h"

Zamiana kolejności tak by w obydwu plikach było

#include "komunikacja.h"
#include "funkcje.h"

A w pliku komunikacja .h znalazła się deklaracja struktury rozwiązało problem

1 użytkowników online, w tym zalogowanych: 0, gości: 1