gpt4 book ai didi

c++ - Visual Studio 2017 C2027 使用未定义类型 'SDL_Texture'

转载 作者:行者123 更新时间:2023-11-30 00:44:22 34 4
gpt4 key购买 nike

我从在 gcc 中编译我的代码转向了 Visual Studio 2017 提供的编译器。

每次我尝试运行该应用程序时,我都会收到以下错误:

enter image description here

这是我认为错误来自的文件:

Texture.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

Texture.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。

最佳答案

SDL.h不包含SDL_Texture的定义.它只包含一个前向声明。这是因为您永远不会直接使用该类型,而只会使用指向它的指针。但是,为了实例化std::unique_ptr<SDL_Texture> ,您需要完整的定义。

但是你为什么要使用 std::unique_ptr反正这里没有自定义删除器,因为您只需要使用 SDL_DestroyTexture 手动删除对象?这违背了使用智能指针的全部目的。试试这个:

struct TextureDeleter
{
void operator()(SDL_Texture* tp) {
SDL_DestroyTexture(tp);
}
};

std::unique_ptr<SDL_Texture, TextureDeleter> m_texture;

关于c++ - Visual Studio 2017 C2027 使用未定义类型 'SDL_Texture',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49158337/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com