Dzielenie kodu na kilka plików źródłowych - "struktury globalne" a kilka plików
Ostatnio zmodyfikowano 2012-09-27 22:23
tariel36 Temat założony przez niniejszego użytkownika |
» 2012-09-27 13:58:46 czyli da przykładu powinno to wyglądać tak: //globals.hpp #ifndef globals_hpp #define globals_hpp #include <iostream> #include <cstdio> #include <cstdlib> #include <string> #include <fstream> using namespace std; #define C_BS 10 #define C_RS 10 #define C_PS 2
struct g_struct { //już kij co w nich jest, zakładając ze tez nie potrzebują żadnego prefixu }; extern g_struct g_ctrl;
struct b { //... }; extern b bs[C_BS];
struct r { //... }; extern r rs[C_RS];
struct ps { //... };
funkcje_x.hpp #ifndef funkcje_x_hpp #define funkcje_x_hpp
//doklejone bo mial problemy bez tego.. #define C_BS 10 #define C_RS 10 #define C_PS 2 //--
void p_a(); void p_bl(); void p_re(); #endif
funkcje_x.cpp #include "funkcje_x.hpp" struct g_struct; extern g_struct g_ctrl; struct b; extern b bs[C_BS]; struct r; extern r rs[C_RS]; struct ps; extern ps p[C_PS]; //reszta kodu
W takim wypadku kompilator mi zwraca takie errory: ||In function 'void funkcja_x()':| |13|error: invalid use of incomplete type 'struct ps'| |8|error: forward declaration of 'struct ps'|
|
|
DejaVu |
» 2012-09-27 14:02:21 Jeżeli chodzi Ci o zmienne globalne to: struct RDane { };
extern RDane gZmienna;
Tworząc zmienną, jej typ musi być już zdefiniowany. Wyjątkiem są wskaźniki, gdzie można zadeklarować, że będzie istniała jakaś struktura/klasa i kompilator wówczas to skompiluje. |
|
tariel36 Temat założony przez niniejszego użytkownika |
» 2012-09-27 22:23:47 No w końcu chyba to ogarnąłem (przynajmniej w tym kodzie), bo projekt się skompilował i wydaje się działać jak należy. Zapewne ciągle to mówiliście ale pewnie moja niekumatość też działała. Oto co zrobiłem za waszymi radami i kilkoma testami: -extern g_struct g_ctrl; i innych -#include "globals.hpp" do plików funkcje_x.cpp i funkcje_y.cpp -do main.cpp wsadziłem: g_struct g_ctrl; b bs[C_BS]; r rs[C_RS]; ps p[C_PS]; Nie jestem pewien czy jest to wszystko poprawne, ale błędy zniknęły więc problem wydaje się być rozwiązany. Także dziękuje wszystkim za anielską cierpliwość i pomoc. |
|
1 « 2 » |