0

変数のbeeld, knop, clips, foto, text, font,fontkleurを使用した複数の定義に問題がmuziekありますevent。問題は主に次のファイルにあります。

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

4

1 に答える 1

4

.h ファイルで行うように変数を定義すると、深刻な問題が発生します。このような定義はその変数用のスペースを予約するため、そのような .h ファイルを 2 つの異なる C++ ファイルに含めると、各 c++ モジュールで個別のインスタンスが取得され、リンク時に競合が発生します。

通常、.h ファイルでは変数が宣言されています(定義されていません) extern のように

extern int X;

これにより、シンボルは有効になりますが、メモリは予約されないため、 extern キーワードを含めると、複数の定義の問題がなくなります。ただし、1 つのモジュール (おそらく main.cpp ファイル) に1 つの実際の完全な定義が必要です。

int X=0;
于 2012-07-31T15:10:33.880 に答える