C/Struktura - osobne pliki

0

Witam wszystkich forumowiczów,
mam następujący problem:
Dosyć długi program chcę podzielić na kilka plików. W programie tym są dwie struktury (niech jedna z nich to będzie struct Node), które umieściłem w pliku main.h, w nim znajduję się również linijka *typedef struct Node Lista, czyli deklaruje obiekt typu Lista. Następnie chce utworzyć jakiś plik (np. 1.c) i w nim chce mieć funkcję których argumenty to elementy typu Lista, również zwracają one obiekt typu Lista. Zatem musi mieć on linijkę #include "main.h", prawda? Oczywiście muszę zrobić plik nagłówkowy 1.h, w którym będą deklaracje tychże funkcji. Ale w pliku 1.h muszę dodatkowo umieścić informację co to jest typ Lista. Jak mam to zrobić? Domyślam się, że należy użyć polecenia extern. Tylko w jaki sposób?

0

Z tego co zrozumiałem po prostu chcesz podzielić program na pliki. Nie ma w tym nic trudnego. Ja przynajmniej robię to w taki sposób:
Tworzę plik mainn.cpp w którym są przechowywane główne funkcje programu
Następnie plik main.h w którym w twoim przypadku deklaruje strukturę i używane funkcje.
Następnie tworzę plik functions.cpp gdzie dane funkcje są rozwijane przykładowo:
main.cpp:

#include "main.h"
int main()
{
	el_listy *head = NULL;
	//dodawanie elementów do listy
	wypisz(head);
	getch();
	return 0;
} 

main.h:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct lista
{
	int val;
	struct lista *prev, *next;
} el_listy;
void wypisz(el_listy *lista);
 

functions.cpp:

 
#include "main.h"
void wypisz(el_listy *lista)
{
	if(lista == NULL) printf("Lista Pusta!\n");
	else
	{
		while(lista)
		{
			printf("%d\n", lista->val);
			lista = lista->next;
		}
	}
}

I to w sumie tak działa

0

Rozumiem. Dziękuję za odpowiedź. Idąc tym sposobem w moim przypadku w pliku main.h byłoby dużo funkcji, których definicje byłyby w różnych plikach. Np. mam 10 funkcji w pliku **main.h ** i muszę je rozmieścić w pięciu plikach po 2 funkcje, niech pliki z funkcjami nazywają się plik_i_.c gdzie i=1,2,3,4,5. Zatem w każdym plik_i_.c będę musiał umieścić linijkę #include "main.h". Czyli w pliku plik_1_.c będą dwie funkcje, ale ten plik będzie zawierał deklaracje też do 8 innych funkcji, chociaż nie potrzebuje tego. Zatem taki styl programowania nie jest chyba poprawny? Żeby pokazać to na przykładzie, to tak:
Niech plik main.c będzie taki jak u Ciebie, a pozostałe wyglądają tak:
main.h:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct lista
{
	int val;
	struct lista *prev, *next;
} el_listy;
 

functions.cpp:

 
#include "main.h"
#include "functions.h"
void wypisz(el_listy *lista)
{
	if(lista == NULL) printf("Lista Pusta!\n");
	else
	{
		while(lista)
		{
			printf("%d\n", lista->val);
			lista = lista->next;
		}
	}
}

functions.h:

void wypisz(el_listy *lista);

I teraz pytanie moje: co muszę dodać do pliku functions.h, aby było wszystko w porządku?

0

powinieneś na pewno dodać #include "main.h" a potem wszystko powinno działać.

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