【发布时间】:2018-03-07 17:51:47
【问题描述】:
我从在 gcc 中编译我的代码转移到 Visual Studio 2017 提供的编译器。
每次我尝试运行应用程序时都会收到以下错误:
这是我认为错误来自的文件:
纹理.h
#include <SDL2/SDL.h>
#include <memory>
#include <string>
namespace AcsGameEngine {
class Renderer;
class Texture {
public:
Texture(const Renderer& renderer);
Texture(const Renderer& renderer, const std::string&);
Texture(const Texture& orig) = default;
virtual ~Texture();
void load(const std::string&, uint16_t w = 0, uint16_t h = 0) const;
void load(const char*, uint16_t w = 0, uint16_t h = 0);
const Renderer& getRenderer() const { return m_renderer; }
//inline SDL_Texture* getRawPointer() const { return m_texture->get(); }
private:
std::unique_ptr<SDL_Texture> m_texture;
const Renderer& m_renderer;
uint16_t m_width;
uint16_t m_height;
};
} // namespace AcsGameEngine
纹理.cpp
#include "Texture.h"
#include "Renderer.h"
#include <SDL2/SDL_image.h>
namespace AcsGameEngine {
Texture::Texture(const Renderer &renderer) : m_renderer(renderer) {
}
Texture::Texture(const Renderer &renderer, const std::string &p) : Texture(renderer) {
load(p.c_str());
}
Texture::~Texture() {
if (m_texture != nullptr) {
SDL_DestroyTexture(m_texture.get());
}
}
void Texture::load(const std::string &path, uint16_t w, uint16_t h) const {
load(path.c_str());
}
void Texture::load(const char *path, uint16_t w, uint16_t h) {
SDL_Surface *tmp = IMG_Load(path);
m_texture.reset(SDL_CreateTextureFromSurface(m_renderer.getRawPointer(), tmp));
SDL_FreeSurface(tmp);
if (m_texture == false) {
//error
}
}
} // namespace AcsGameEngine
我不明白为什么它抱怨未定义类型,因为 SDL.h 包含结构 SDL_Texture。
【问题讨论】:
标签: c++ visual-studio-2017 sdl-2