Odd*_*ore 20 c++ opengl sdl lnk2019
所以,臭名昭着的错误又回来了.该项目抱怨它无法找到main()方法(这就是错误的意思,对吧).
但是我确实有一个main,我的项目是一个Console项目,应该是.它以前工作过,所以我知道不是那样的.
此外,该项目有太多的类和文件供我发布,所以我会按要求发布您需要的任何类.
它是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;
}
Run Code Online (Sandbox Code Playgroud)
rod*_*igo 53
SDL_main.h自动包含在SDL.h中,所以你总是得到令人讨厌的#define.
写吧:
#include <SDL.h>
#undef main
Run Code Online (Sandbox Code Playgroud)
它应该工作正常
For*_*gic 29
另一种选择实际上是使用常用参数定义自己的main
int main(int argc, char *args[])
{
// Your code here
}
Run Code Online (Sandbox Code Playgroud)
那应该摆脱错误.
然后,如果您不使用这些参数,并且您还想摆脱编译器警告,您可以在主函数中执行该操作.
(void)argc;
(void)args;
Run Code Online (Sandbox Code Playgroud)
jen*_*ens 11
SDL 文档中的默认解决方案:
tl;博士:
#define SDL_MAIN_HANDLED
#include "SDL.h"
Run Code Online (Sandbox Code Playgroud)
完整示例:
当不使用 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;
}
Run Code Online (Sandbox Code Playgroud)
来源:https : //wiki.libsdl.org/SDL_SetMainReady