SDL程序中存在多个定义错误



我对变量的beeldknopclipsfototextfontfontkleurmuziekevent的多个定义有问题。问题主要出现在以下文件中:

globals.h

#ifndef globals_H
#define globals_H
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include "SDL/SDL_ttf.h"
#include "SDL/SDL_mixer.h"
SDL_Surface *beeld = NULL;
SDL_Surface *knop = NULL;
SDL_Rect clips[ 4 ];
SDL_Surface *foto = NULL;
SDL_Surface *text = NULL;
TTF_Font *font = NULL;
SDL_Color fontkleur = { 100, 0, 10 };
Mix_Music *muziek = NULL;
SDL_Event event;
#endif

main.cpp

#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include "SDL/SDL_ttf.h"
#include "SDL/SDL_mixer.h"
#include "variabelen.h"
#include "class.h"
#include "functies.h"
#include "globals.h"
#include <string>

int main( int argc, char* args[] )
{
    bool stop = false;
    if( init(beeld_L,beeld_H,beeld_BPP) == false )
    {
        return 1;
    }
    foto = zichtbaar_scherm( "rescource/achtergrond.png" );
    knop = zichtbaar_scherm( "rescource/knop.png" );
    font = TTF_OpenFont( "rescource/lazy.ttf", 80 );
    muziek = Mix_LoadMUS( "rescource/muziek.wma" );
    laad_prenten(foto);
    laad_prenten(knop);
    laad_text(font);
    laad_muziek(muziek);
    if( laad_prenten(foto) == false || laad_prenten(knop) == false || laad_text(font) == false || laad_muziek(muziek) == false )
    {
        return 1;
    }
    set_clips();
    Knop drukknop( 170, 180, 320, 120 );
    plus_laag( 0, 0, foto, beeld );
    text = TTF_RenderText_Solid( font, "START !", fontkleur );
    plus_laag( ( 320 - text->w ) / 2, 30, text, knop );
    Mix_PlayMusic( muziek, -1 );
    while( stop == false )
    {
        if( SDL_PollEvent( &event ) )
        {

            if( event.type == SDL_QUIT )
            {
                stop = true;
            }
            if( drukknop.events() == true )
            {
                stop = true;
            }
        }
        drukknop.toon();
        if( SDL_Flip( beeld ) == -1 )
        {
            return 1;
        }
    }
    afsluiten();
    return 0;
}

程序制作一个小菜单:D

像在.h文件中那样定义变量有一个严重的问题。这样的定义为该变量保留了空间,这样,如果在两个不同的C++文件中包含这样的.h文件,则在EACH C++模块中会得到单独的实例,这会在链接时产生冲突。

通常在.h文件中,变量是声明的(但未定义)外部变量,类似于

extern int X;

这使符号有效,但不保留内存,因此如果包含extern关键字,则多个定义的问题就会消失。然而,您确实需要在一个模块(可能是您的main.cpp文件)中使用一个真正完整的定义

int X=0;

最新更新