c++ - SDL程序中的多重定义错误

标签 c++ sdl definition

<分区>

我对变量的 beeldknopclipsfoto文本字体fontkleurmuziek事件。 问题主要出在这些文件中:

全局变量

#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

主要.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 文件,您将在每个 C++ 模块中获得单独的实例,这在链接时会给您带来冲突。

通常在 .h 文件中变量是这样声明(但未定义)extern 的

extern int X;

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

int X=0;

关于c++ - SDL程序中的多重定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11743049/

相关文章:

c++ - 使用 MySQL Connector C++ 构建程序时出错

c++ - 将 Makefile 转换为 Tiva C 系列的 CMakeLists.txt

c++ - 使用 GL_TRIANGLE_STRIP 或索引 GL_TRIANGLES 绘制动态数量的四边形是否更有效

c++ - 未在此范围内声明的函数和变量(c++)

c - 函数声明的含义

c++ - 英特尔 DRNG 只给出 4 个字节的数据而不是 8 个

c++ - 从 C++ 文件中读取,处理空白

c - 如何在可能已依赖于 SDL 的程序使用的库中初始化 SDL?

c++ - 类没有构造函数前向声明

c++ - 下面的第一个片段编译,但第二个没有。为什么?