我可以在头中不包含SDL的情况下进行编译吗



在用vcpkg安装SDL后,我一直在尝试让SDL2在Visual Studio中工作。我在C中使用了SDL2,在makefiles中使用了C++,对我来说效果很好。我复制了一些以前使用make文件的C++代码,但在使用Visual Studio时,它不再能够编译。我一直在头文件上得到一个错误,那是因为它无法识别SDL标识符。

对于我的makefile,我不需要在头文件中包含SDL2/SDL.h,只需要在cpp文件中即可。Visual Studio不允许我做同样的事情。这只是我错过的一个场景吗?我真的需要在头文件中也包含SDL2/SDL.h吗?

我把代码的一部分粘贴在下面。正在为SDL_WindowSDL_RendererSDL_Color抛出错误。

//Handler.hpp
#ifndef HANDLER_H_
#define HANDLER_H_
//#include <SDL2/SDL.h> // <- Without this it throws errors
class Handler
{
public:
//variables
SDL_Window * window;        //A pointer to the window being handled
SDL_Renderer * renderer;    //A pointer to the renderer for the window
unsigned int window_x;      //The width of the window
unsigned int window_y;      //The height of the window
SDL_Color render_color;     //The current drawing color of the renderer
Handler();
Handler(std::string title, unsigned int x, unsigned int y, bool resizable = false, SDL_Color color);
~Handler();
}
#endif //HANDLER_H_

然后我有了这个文件,其中包括SDL2/SDL.h。这在以前使用makefiles:时就足够了

#include <string>
#include <iostream>
#include <SDL2/SDL.h>
#include "Handler.hpp"
/* ------ Constructors ------ */
Handler::Handler()
{
window_x = DEFAULT_WINDOW_SIZE;
window_y = DEFAULT_WINDOW_SIZE;
window = SDL_CreateWindow("Title", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
window_x, window_y, 0);
renderer = SDL_CreateRenderer(window, -1, 0);
render_color = DEFAULT_COLOR;
SDL_SetRenderDrawColor(renderer, render_color.r, render_color.g, render_color.b, render_color.a);
}
Handler::Handler(std::string title, unsigned int x, unsigned int y, bool resizable, SDL_Color color)
{
window_x = x;
window_y = y;
int flags{ 0 };
if (resizable)
flags = SDL_WINDOW_RESIZABLE;
window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
window_x, window_y, flags);
renderer = SDL_CreateRenderer(window, -1, 0);
render_color = color;
SDL_SetRenderDrawColor(renderer, render_color.r, render_color.g, render_color.b, render_color.a);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
/* ------ Deconstructor ------ */
Handler::~Handler()
{
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
}

您可能会对SDL_WindowSDL_Renderer使用正向声明,但不确定SDL_Color

最新更新