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

Dzielenie kodu na kilka plików źródłowych - "struktury globalne" a kilka plików

Ostatnio zmodyfikowano 2012-09-27 22:23
Autor Wiadomość
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'|

P-65624
DejaVu
» 2012-09-27 14:02:21
Jeżeli chodzi Ci o zmienne globalne to:
C/C++
//plik *.hpp
struct RDane
{
    //...
};

extern RDane gZmienna;

C/C++
//plik *.cpp

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.
P-65625
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.
P-65653
1 « 2 »
Poprzednia strona Strona 2 z 2