您好我的IDE Visual Studio 2012出了问题。我已经开始学习SDL了,所以我对它很新,我正在尝试使用SDL时应用良好的结构。当我开始在课程中使用SDL时,问题就出现了。如果我在main中键入所有内容,它工作正常。我不知道你做错了什么,你能帮到这里是错误
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:\Users\User\documents\visual studio 2012\Projects\Nebula\Debug\Nebula.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)上运行我不知道这是否是问题。对不起,如果这个问题已经回答,我可以找到答案。提前谢谢。
答案 0 :(得分:0)
我认为问题在于Visual Studio的.NET Framework使用System
作为根级别命名空间,因此您可能遇到名称冲突。尝试将您的类命名为System以外的其他内容。
答案 1 :(得分:0)
我明白了!使用SDL构建对象时会出现此问题,并且存在两个lib的冲突,您需要忽略其中一个。您需要忽略LIBCMT.lib。如果您不知道如何执行以下步骤:
打开项目的属性页。
单击链接器文件夹。
单击“输入”页面。
选择忽略特定的默认库并进入编辑并输入LIBCMT.lib然后按确定然后应用设置,你应该很高兴。
我希望这能为你节省几天的痛苦:)