我在尝试创建我的第一个SDL应用程序时遇到这两个错误,尽管我不确定它们是否相关。我试图找到每个的原因,但我找不到任何帮助我。我使用的是SDL 2.0.3,而且是在Windows 7上。
我查了WinMain
错误,发现它可能正在尝试编译为Windows应用程序而不是控制台。所以我确保它在我的项目设置中是控制台,它仍然给了我这个错误(虽然我并不完全确定它应该被设置为SDL游戏)。
我发现的SDL_PollEvent
错误的任何相关问题通常都是涉及不仅仅涉及一行的问题。但是,我相当肯定我已将其正确链接,因为我之前已经解决了之前已解决的问题,并且我有另一个引用SDL_Event
但没有给出任何错误。这似乎特别奇怪,因为SDL_PollEvent
和SDL_Event
都在同一个头文件中。
这是我的来源和完整的错误输出:
CApp.h:
#ifndef CAPP_H_INCLUDED
#define CAPP_H_INCLUDED
#include <SDL.h>
class CApp{
private:
bool Running;
public:
CApp();
int OnExecute();
bool OnInit();
void OnEvent(SDL_Event* event);
void OnLoop();
void OnRender();
void OnCleanup();
};
bool CApp::OnInit(){
return true;
}
void CApp::OnEvent(SDL_Event* event){
}
void CApp::OnLoop(){
}
void CApp::OnRender(){
}
void CApp::OnCleanup(){
}
CApp.cpp:
#include "CApp.h"
CApp::CApp(){
Running = true;
}
int CApp::OnExecute(){
if(OnInit() == false){
return -1;
}
SDL_Event event;
while(Running){
while(SDL_PollEvent(&event)){
OnEvent(&event);
}
OnLoop();
OnRender();
}
OnCleanup();
return 0;
}
int main(){
CApp theApp;
return theApp.OnExecute();
}
错误输出:
||=== Build: Debug in CApp (compiler: GNU GCC Compiler) ===|
obj\Debug\CApp.o||In function `ZN4CApp9OnExecuteEv':|
C:\Users\UserName\C++ Projects\Test Platformer\CApp.cpp|17|undefined reference to `SDL_PollEvent'|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\..\..\..\libmingw32.a(main.o):main.c:(.text.startup+0xa7)||undefined reference to `WinMain@16'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
提前感谢您的任何帮助:)
修改
链接器输出:
mingw32-g++.exe -LC:\SDL\SDL2-2.0.3\lib\x64 -LC:\SDL\SDL2-2.0.3\lib -o "bin\Debug\Test Platformer.exe" obj\Debug\CApp.o -lmingw32 -lSDL2main -lSDL2 -lgdi32
obj\Debug\CApp.o: In function `ZN4CApp9OnExecuteEv':
C:/Users/Zshandi/C++ Projects/Test Platformer/CApp.cpp:17: undefined reference to `SDL_PollEvent'
collect2.exe: error: ld returned 1 exit status
答案 0 :(得分:0)
我现在已经解决了我的问题,我花了一段时间才找到解决方案。对于我得到的WinMain @ 15错误,我发现这是因为SDL定义了它自己的主要功能,所以我不得不在我的源代码中添加#undef main
。对于我遇到的另一个问题,似乎我使用了错误的lib并包含了给我错误的文件,我发现我必须使用32位mingw文件。