28

所以,臭名昭著的错误又回来了。该项目抱怨它找不到 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;
}
4

4 回答 4

78

SDL_main.h 会自动包含在 SDL.h 中,因此您总是会得到讨厌的 #define。

写吧:

#include <SDL.h>
#undef main

它应该可以正常工作

于 2011-07-27T16:24:18.220 回答
40

另一种选择实际上是用通常的参数定义你自己的 main

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

那应该摆脱错误。

然后,如果您不使用这些参数并且还想摆脱编译器警告,则可以在 main 函数中执行该技巧。

(void)argc;
(void)args;
于 2013-12-18T03:37:12.950 回答
11

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

于 2018-04-29T14:23:50.293 回答
2

罪魁祸首很可能是SDL_main.h。检查您是否不包含该文件,那里有一个讨厌的定义:

#define main SDL_main
于 2011-07-27T16:02:31.030 回答