繁体   English   中英

C ++代码块错误:对SDL_PollEvent和WinMain @ 16的未定义引用

[英]C++ Code Blocks error: undefined reference to SDL_PollEvent and WinMain@16

尽管我不确定它们是否相关,但是在尝试创建我的第一个SDL应用程序时遇到了这两个错误。 我试图找到每个原因,但没有发现对我有帮助。 我正在使用SDL 2.0.3,并且在Windows 7上使用。

我查找了WinMain错误,发现它可能试图作为Windows应用程序而不是控制台进行编译。 因此,我确保它是项目设置中的控制台,并且仍然给了我该错误(尽管我不完全确定SDL游戏应该将其设置为什么)。

与我发现的SDL_PollEvent错误相关的任何问题通常都是链接问题,涉及的不仅仅是一行。 但是,我相当确定我已正确链接了它,因为以前确实有解决问题的链接问题,并且我还引用了SDL_Event ,但没有错误。 这似乎特别奇怪,因为SDL_PollEventSDL_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

我现在已经解决了我的问题,花了我一段时间才找到解决方案。 对于我遇到的WinMain @ 15错误,我发现这是因为SDL定义了它自己的main函数,所以我不得不在源代码中添加#undef main 对于我遇到的另一个问题,似乎我使用了错误的lib并包含了给我带来错误的文件,我发现我不得不使用32位mingw文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM