在用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_Window
、SDL_Renderer
和SDL_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_Window
和SDL_Renderer
使用正向声明,但不确定SDL_Color
。