簡體   English   中英

錯誤 LNK2019:函數 ___tmainCRTStartup 中引用了未解析的外部符號 _main,但這一次不是 Windows/控制台問題!

[英]error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup, but this time it's NOT a Windows/Console problem!

所以,臭名昭著的錯誤又回來了。 該項目抱怨它找不到 main() 方法(這就是錯誤的含義,對)。

但是,我確實有一個主項目,而我的項目應該是一個控制台項目。 它以前有效,所以我知道不是那樣。

此外,該項目有太多的類和文件,我無法將它們全部發布,因此我將根據您的要求發布您需要的任何類。

它是 Visual Studio 2010 上的 C++、OpenGL 和 SDL 游戲。這不是任何庫的問題,因為它在突然莫名其妙地顯示此鏈接器錯誤之前工作正常。

編輯: main() 方法:

int main(int argc, char **argv)
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_ALPHA);
 glutCreateWindow("Game");

 glEnable(GL_DEPTH_TEST);
 glEnable(GL_NORMALIZE);
 glEnable(GL_COLOR_MATERIAL);
 glEnable(GL_BLEND);
 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

 g = Game();
 glutInitWindowSize(g.getScreenWidth(), g.getScreenHeight());
 //glutPositionWindow(1280, 50);

 // Callbacks
 glutDisplayFunc(handleRedraw);
 glutReshapeFunc(handleResize);
 glutMouseFunc(handleMouseClicks);
 glutPassiveMotionFunc(handleMouseOvers);
 glutKeyboardFunc(handleKeyboardEvents);
 glutTimerFunc(50, moveItemToInventory, 0);

 glutMainLoop();

 return 0;
}

SDL_main.h 是從 SDL.h 自動包含的,因此您總是會遇到令人討厭的 #define。

寫就好了:

#include <SDL.h>
#undef main

它應該可以正常工作

另一種選擇實際上是用通常的參數定義你自己的 main

int main(int argc, char *args[])
{
    // Your code here
}

那應該擺脫錯誤。

然后,如果您不使用這些參數並且您還想擺脫編譯器警告,您可以在主函數中使用該技巧。

(void)argc;
(void)args;

SDL 文檔中的默認解決方案:

tl;博士:

#define SDL_MAIN_HANDLED
#include "SDL.h"

完整示例:

當不使用 SDL_main() 作為入口點時,使用此函數可以避免 SDL_Init() 失敗。

#define SDL_MAIN_HANDLED
#include "SDL.h"

int main(int argc, char *argv[])
{
    SDL_SetMainReady();
    SDL_Init(SDL_INIT_VIDEO);

    ...

    SDL_Quit();

    return 0;
}

來源: https : //wiki.libsdl.org/SDL_SetMainReady

罪魁禍首很可能是SDL_main.h 檢查您是否不包含該文件,那里有一個討厭的定義:

#define main SDL_main

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM