带有类的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。如果你不知道如何操作,下面是步骤:
-
打开项目的属性页。
-
单击Linker文件夹。
-
单击输入页面。
-
选择"忽略特定默认库"并进入编辑并放入LIBCMT.lib中,按"确定"然后应用设置,您应该可以开始了。
我希望这能帮你省去几天的痛苦:)
相关文章:
- 没有找到相关文章