c ++从单个源文件转换到多个文件。错误:'空白'没有命名类型

时间:2015-07-25 08:10:01

标签: c++

我目前正在尝试使用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中收到错误

1 个答案:

答案 0 :(得分:0)

Renderer = NULL;是一个赋值语句,在全局范围内不能包含它。您只能在全局范围内拥有声明。由于您已在头文件中声明了Renderer,因此您也不需要重新声明它。只需在其中一个初始化函数中将其设置为null(例如,您当前的init()函数)。