带有类的SDL

SDL with classes

本文关键字:SDL      更新时间:2023-10-16

您好,我的IDE Visual Studio 2012出现问题。我已经开始学习SDL,所以对它还很陌生,我正在尝试在使用SDL时应用良好的结构。当我开始在类中使用SDL时,问题就出现了。如果我把所有的内容都输入到正文中,效果会很好。我不知道哪里做错了,你能帮我吗?这里是错误

1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _exit already defined in LIBCMT.lib (crt0dat.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: ___iob_func already defined in LIBCMT.lib(_file.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _fclose already defined in LIBCMT.lib(fclose.obj)
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>C:UsersUserdocumentsvisual studio 2012ProjectsNebulaDebugNebula.exe : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

如果有问题,这是我的代码

#include <SDL.h>
#include "System.h"
int main(int argc, char* argv[])
{
    System RedObject;
    RedObject.SetUp();
    SDL_Quit();
    return 0;
}

第二个文件。

#include "System.h"
System::System()
{
}
System::~System()
{
}
void System::SetUp()
{
    SDL_Init(SDL_INIT_EVERYTHING); // The SDL Set up bit.
    SDL_Surface * screen;
    SDL_WM_SetCaption("Window Name", NULL);
    fullscreen = false;
    if(fullscreen == true)
    {
        screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE | SDL_FULLSCREEN);
    }
    else
    {
        screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
    }
    bool running = true;
    while(running)
    {
        SDL_Event Event;
        while(SDL_PollEvent(&Event))
        {
            switch(Event.type)
                case SDL_QUIT:
                    running = false;
                break;
        }
        SDL_Flip(screen);
    }
}

第二个文件头:

#ifndef SYSTEM_H
#define SYSTEM_H
#include <SDL.h>
class System
{
    private:
        int SHeight, SLenght;
        bool fullscreen;
    public:
        System();
        ~System();
        void SetUp();
};
#endif

此外,我已经设置了IDE代码生成器在多线程DLL(/MD)上运行,我不知道这是否是问题所在。很抱歉,如果这个问题已经被回答了,我可以找到答案。提前谢谢。

我认为问题在于Visual Studio的.NET Framework使用System作为根级命名空间,因此您可能会遇到名称冲突。试着用系统以外的东西命名你的类。

我想通了!当您使用SDL构建对象时会出现这个问题,并且存在两个lib的冲突,您需要忽略其中一个。你需要忽略LIBCMT.lib。如果你不知道如何操作,下面是步骤:

  1. 打开项目的属性页。

  2. 单击Linker文件夹。

  3. 单击输入页面。

  4. 选择"忽略特定默认库"并进入编辑并放入LIBCMT.lib中,按"确定"然后应用设置,您应该可以开始了。

我希望这能帮你省去几天的痛苦:)

相关文章:
  • 没有找到相关文章