Salve a tutti. Sto crendo un piccolo gioco con c++, per "tenermi in allenamento", utilizzando Visual Studio 2019 e SDL. Sto riscontrando alcuni problemi, in quanto in fase di compilazione, in alcuni file header non mi riconosce alcune classi come tipo di dato o spazio di nome. eppure ho utilizzato il relativo include. Per esempio in questo file:
#pragma once
#include <string>
#include <SDL.h>
#include "ECS.h"
#include "TransformComponent.h"
#include "Texture.h"
#include "Game.h"
class ColliderComponent : public Component
{
public:
SDL_Rect collider;
std::string tag;
SDL_Texture* tex;
SDL_Rect srcR, destR;
TransformComponent* transform;
//costruttore
ColliderComponent(std::string t) { tag = t; }
ColliderComponent(std::string t, int x_pos, int y_pos, int size) {
tag = t;
collider.x = x_pos;
collider.y = y_pos;
collider.h = collider.w = size;
}
void init() override {
if (!entity->has_component<TransformComponent>()) {
entity->add_component<TransformComponent>();
}
transform = &entity->get_component<TransformComponent>();
tex = Texture::load_texture("images\\Collision_text.png");
srcR = { 0, 0, 32, 32 };
destR = { collider.x, collider.y, collider.w, collider.h };
}
void update() override {
if (tag != "terrain") {
collider.x = static_cast<int>(transform->position.x);
collider.y = static_cast<int>(transform->position.y);
collider.w = transform->width * transform->scale;
collider.h = transform->height * transform->scale;
}
destR.x = collider.x - Game::camera.x;
destR.y = collider.y - Game::camera.y;
}
void draw() override {
Texture::Draw(tex, srcR, destR, SDL_FLIP_NONE);
}
};
Mi da problemi tipo:
C2653 'Texture' non è il nome di una classe o di uno spazio dei nomi
C3861 'load_texture': identificatore non trovato
Eppure ho incluso il file header TEXTURE.H ed è questo:
#pragma once
#include <SDL.h>
#include <SDL_image.h>
#include "Game.h"
class Texture
{
public:
//inizializzare una texture, per esempio i personaggi
static SDL_Texture* load_texture(const char* fileName);
static void Draw(SDL_Texture* tex, SDL_Rect src, SDL_Rect dest, SDL_RendererFlip flip);
};
Stessi problemi per il file Game, sempre all'interno del primo file, che è questo:
#include <SDL.h>
#include <SDL_image.h>
#include <vector>
#include <iostream>
#include "AssetManager.h"
#include "Map.h"
#include "SpriteComponent.h"
#include "KeyboardController.h"
#include "Collision.h"
#include "TransformComponent.h"
class Game
{
public:
//costruttore e distruttore
Game();
~Game();
void init(const char* title, int width, int height, bool fullscreen);
void handle_events();
void update();
void clear();
void render();
//metodo per acquisire dati membri
bool running() { return is_running; }
static AssetManager* assets;
static SDL_Renderer *renderer;
static SDL_Event event;
static bool is_running;
static SDL_Rect camera;
//enumerazione dei vari livelli del gioco
enum layers : std::size_t {
layer_map,
layer_player,
layer_colliders
};
private:
SDL_Window* window;
};
Inoltre questo tipo di errore viene fuori anche in altri file e non so come risolverlo. In realtà mi era già capitato prima, sempre in questo progetto, si è risolto ma non ho capito come.
Grazie in anticipo per le eventuali risposte e ovviamente se servono altri file non esitate a dirmelo.