我目前正在尝试使用SDL编写一个非常简单的2D游戏引擎,以帮助自己更轻松地编码。不幸的是,我错误地从单个源文件开始,现在我的代码越来越大,我试图将现有代码(在拆分之前工作正常)分成多个头文件和源文件。我遇到的第一个主要问题是,当我在init.h中声明它们后尝试在init.cpp中定义SCREEN_HEIGHT,SCREEN_WIDTH,Window和Renderer时,我收到错误:'空白'没有命名类型(空白是Window,Renderer等)。我也试图让它们成为全球性的,这可能是问题的一部分。下面是相关代码(我拿出了我认为在这种情况下无关紧要的所有内容)。我怀疑我在这里只是遗漏了一些非常简单的东西,但是我在网上找不到现有的答案,就像我以前的问题一样。
的main.cpp
#include "globals.h"
#include "texture.h"
....
globals.h
#ifndef GLOBALS
#define GLOBALS
#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include <stdio.h>
#include <string>
#endif //GLOBALS
texture.h
#ifndef TEXTURE
#define TEXTURE
#include "globals.h"
#include "init.h"
....
#endif // TEXTURE
texture.cpp
#include "texture.h"
....
init.h里
#ifndef INIT
#define INIT
#include "globals.h"
//screen dimensions
int SCREEN_WIDTH;
int SCREEN_HEIGHT;
//initiates SDL and creates a window and renderer
bool init();
//the created window
SDL_Window* Window;
//the renderer that will be used
SDL_Renderer* Renderer;
#endif // INIT
init.cpp
#include "init.h"
SCREEN_WIDTH = 640;
SCREEN_HEIGHT = 480;
Window = NULL;
Renderer = NULL;
bool init()
{
bool success = true;
if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
{
printf( "SDL was unable to initialize! SDL Error: %s\n", SDL_GetError());
success = false;
}
else
{
if( !SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1"))
{
printf( "Linear texture filtering not enabled!");
}
else
{
Window = SDL_CreateWindow( "Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if( Window == NULL)
{
printf( "Window could not be created! SDL Error: %s\n", SDL_GetError());
success = false;
}
else
{
Renderer = SDL_CreateRenderer( Window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if( Renderer == NULL)
{
printf( "Renderer could not be created! SDL Error: %s\n", SDL_GetError());
success = false;
}
else
{
SDL_SetRenderDrawColor( Renderer, 0xFF, 0xFF, 0xFF, 0xFF);
int PNGImage = IMG_INIT_PNG;
if( !(IMG_Init( PNGImage) & PNGImage))
{
printf( "Image loading not enabled! SDL_Image Error: %s\n", IMG_GetError());
success = false;
}
if( TTF_Init() == -1)
{
printf( "True type fonts not enabled! SDL_TTF Error: %s\n", TTF_GetError());
success = false;
}
}
}
}
}
return success;
}
我在bool init()
之前的代码顶部的init.cpp中收到错误答案 0 :(得分:0)
Renderer = NULL;
是一个赋值语句,在全局范围内不能包含它。您只能在全局范围内拥有声明。由于您已在头文件中声明了Renderer
,因此您也不需要重新声明它。只需在其中一个初始化函数中将其设置为null(例如,您当前的init()
函数)。