Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dzielenie kodu na moduły

Ostatnio zmodyfikowano 2025-06-04 00:28
Autor Wiadomość
Bajt
Temat założony przez niniejszego użytkownika
Dzielenie kodu na moduły
» 2013-02-21 21:37:46
Witam
Używam VC++ 2010 Express. Zawsze mój kod wyglądał tak: pisałem funkcje i wywoływałem je w main'ie. Jednak teraz chce stworzyć większy projekt: grę w Allegro. I zwracam się z pytaniem do Was: jak mam podzielić kod na poszczególne fragmenty, tak, abym w nowym pliku mógł napisać kod odpowiedzialny za sterowanie, w oddzielnym kod odpowiedzialny za wywołanie animacji itd. Wydaje mi się, że mogę to zrobić poprzez dodanie tylko nowego pliku, i później dołączenie go w #include <nazwa.h> - jednak chcę uzyskać dokładną odpowiedź. Pozdrawiam
P-76671
megatron
» 2013-02-21 21:45:29
Dobrze mowisz trzeba stworzyc nowy plik i go podpiac do projektu za pomoca #include

I zamiasz znaku mniejszosci wstawiasz cudzyslow

Dzielenie kodu na kilka plikow zrodlowych
P-76675
mactec
» 2013-02-21 21:53:31
P-76677
SeaMonster131
» 2013-02-21 21:55:52
I zamiasz znaku mniejszosci wstawiasz cudzyslow
Wydaje mi się, że nawet gdy dasz nazwę pliku w <> to gdy kompilator nie znajdzie danego pliku w folderze MinGW, to zacznie go szukać koło plików projektu.
P-76679
Monika90
» 2013-02-21 21:58:39
Załóżmy, że chesz mieć dwa moduły, niech nazywają się main.cpp (moduł główny zawierający funkcję main) i module1.cpp. Pierwsze co musisz zrobić to dodać te dwa pliki do projektu, żeby IDE wiedziało co ma skompilować. Następnie tworzysz interfejs modułu module1, interefejs bedzie zdefiniowany w pliku nagłówkowym, powiedzmy module1.h. Ten plik dołączasz zarówno w pliku main.cpp jak i module1.cpp, za pomocą
#include "module1.h"
. Plik module1.h musi zawierać tzw. dozory łączenia (include guards), np.:
C/C++
#ifndef MODULE1_H_INCLUDED
#define MODULE1_H_INCLUDED
/* tutaj cała zawartośc pliku */
#endif
pomiędzy tymi include guards umieszczasz deklaracje funkcji, definicje klas, itp. z tego modułu, które mają być dostępne dla innych modułów.
np.:
C/C++
void draw( int x, int y );

a z kolei definicje funkcji, definicje funkcji składowych klas, itp. umieszczasz w pliku module1.cpp, o tak:
C/C++
#include "module1.h"

void draw( int x, int y )
{
    /* tu implementacja funkcji draw*/
}

i potem w pliku main.cpp, możesz używać tego co udostępnia module1, np.:
C/C++
#include "module1.h"

int main()
{
    draw( 0, 0 );
}
P-76680
Bajt
Temat założony przez niniejszego użytkownika
» 2013-02-21 22:06:01
Dziękuję
P-76685
termistor
» 2025-06-04 00:28:18
Dzielenie kodu na pliki jest podstawowym elementem zarządzania większymi projektami. Poniżej przedstawiam krok po kroku, jak powinno to wyglądać w praktyce.  

1. Tworzenie pliku nagłówkowego (.h):  
Tworzysz plik np. `module1.h`, w którym deklarujesz funkcje, klasy lub zmienne, które mają być widoczne z innych modułów. Wymagane są dozory łączenia (`#ifndef`/`#define`/`#endif`), aby zapobiec podwójnemu dołączeniu.  
 
#ifndef MODULE1_H_INCLUDED  
#define MODULE1_H_INCLUDED  

void draw(int x, int y);  

#endif  
 

2. Implementacja w pliku źródłowym (.cpp):  
W pliku `module1.cpp` dołączasz nagłówek i implementujesz deklaracje z nagłówka.  
 
#include "module1.h"  

void draw(int x, int y) {  
    // Implementacja funkcji  
}  
 

3. Użycie w main.cpp:  
Dołączasz nagłówek i wywołujesz funkcje/klasy z modułu.  
 
#include "module1.h"  

int main() {  
    draw(0, 0);  
    return 0;  
}  
 

4. Konfiguracja projektu:  
W VC++ 2010 Express dodajesz wszystkie pliki (.cpp) do projektu. Kompilator sam je połączy. Nie musisz ręcznie edytować list kompilacji.  

5. Uwaga o #include:  
Dla własnych plików zawsze używaj cudzysłowów (`#include "module1.h"`). Znaki `< >` są rezerwowane dla bibliotek systemowych (np. `<iostream>`).  

Jeśli chcesz rozdzielić np. sterowanie i animacje, powtórz powyższy schemat dla kolejnych modułów (np. `input.h`/`input.cpp`, `animation.h`/`animation.cpp`). W main.cpp dołączasz wszystkie potrzebne nagłówki.  

Pamiętaj: Każdy .cpp musi być w projekcie, a nagłówki muszą zawierać pełne deklaracje. Unikaj definiowania zmiennych globalnych w nagłówkach (chyba że używasz `extern`).  

Jeśli potrzebujesz przykładów dla Allegro, daj znać – mogę przygotować szkielet struktury.
P-182469
« 1 »
  Strona 1 z 1