He estado trabajando con C++ durante un par de semanas, pero el mecanismo detrás de los archivos de cabecera (¿o el enlazador, supongo?) Me confunde. He adquirido el hábito de crear un "main.h" para agrupar mis otros archivos de cabecera y mantener el main.cpp ordenado, pero a veces esos archivos de cabecera se quejan de que no se puede encontrar un archivo de cabecera diferente (aunque esté declarado) en el "main.h"). Probablemente no estoy explicando muy bien lo que aquí es una versión abreviada de lo que estoy tratando de hacer:¿Alguien puede ayudar a aclarar cómo funcionan los archivos de cabecera?
//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);
};
No incluiré health.cpp porque es un poco largo (pero hace el trabajo), tiene #include "health.h"
.
De todos modos, el compilador (Código :: Bloques) se queja de que "player.h" no puede encontrar los tipos 'Health' o 'Vector'. Pensé que si usaba #include "main.h"
en "player.h" podría encontrar las definiciones para Health
y Vector
sentido que están incluidas en "main.h". Pensé que, de alguna manera, tendrían un túnel (player.h -> main.h -> health.h). Pero eso no funcionó muy bien. ¿Hay algún tipo de diagrama o video que pueda aclarar cómo se debe configurar esto? Google no fue de mucha ayuda (ni mi libro).
No responde su pregunta, pero debe cambiar la Estructura vectorial por un nombre diferente. Se volverá confuso cuando empiece a usar std :: vector, y un punto en el espacio 3D no es realmente un vector de todos modos. – reuscam
Gracias, lo haré. Y tienes razón, debería haber sido Point o algo así. –
En realidad, un vector se define solo por un punto. – Spidey