Ho lavorato con C++ per un paio di settimane, ma il meccanismo dietro i file di intestazione (o il linker suppongo?) Mi confonde. Ho preso l'abitudine di creare un "main.h" per raggruppare i miei altri file header e mantenere l'ordinamento main.cpp, ma a volte quei file header lamentano di non essere in grado di trovare un file header differente (anche se è dichiarato nel "main.h"). Non sto probabilmente spiegare molto bene quindi ecco una versione ridotta di quello che sto cercando di fare:Qualcuno può aiutare a chiarire come funzionano i file di intestazione?
//main.cpp
#include "main.h"
int main() {
return 0;
}
-
//main.h
#include "player.h"
#include "health.h"
#include "custvector.h"
-
//player.h
#include "main.h"
class Player {
private:
Vector playerPos;
public:
Health playerHealth;
};
-
//custvector.h
struct Vector {
int X;
int Y;
int Z;
};
-
//health.h
class Health {
private:
int curHealth;
int maxHealth;
public:
int getHealth() const;
void setHealth(int inH);
void modHealth(int inHM);
};
Non includerò health.cpp perché è un po 'lungo (ma funziona), ha #include "health.h"
.
In ogni caso, il compilatore (Code :: Blocks) lamenta che "player.h" non riesce a trovare i tipi "Salute" o "Vettore". Ho pensato che se avessi usato #include "main.h"
in "player.h", sarebbe stato in grado di trovare le definizioni per Health
e Vector
in modo che fossero incluse in "main.h". Ho pensato che avrebbero fatto una sorta di tunnel a modo loro però (player.h -> main.h -> health.h). Ma quello non ha funzionato troppo bene. C'è qualche tipo di diagramma o video che potrebbe chiarire come dovrebbe essere impostato? Google non è stato di grande aiuto (né il mio libro).
Non risponde alla domanda, ma è necessario modificare la struttura del vettore con un nome diverso. Crescerà confuso quando inizierai a usare std :: vector, e un punto nello spazio 3D non è comunque un vettore. – reuscam
Grazie, lo farò. E hai ragione, dovrebbe essere Point o qualcosa del genere. –
In realtà, un vettore è definito da un solo punto. – Spidey