ошибка LNK2019: неразрешенный внешний символ _main, указанный в функции ___tmainCRTStartup, но на этот раз это НЕ проблема Windows / консоли! - PullRequest
17 голосов
/ 27 июля 2011

Итак, печально известная ошибка вернулась. Проект жалуется, что не может найти метод main () (именно это и означает ошибка).

Однако у меня есть main, и мой проект - это консольный проект, как и должно быть. Это работало раньше, поэтому я знаю, что это не так.

Кроме того, в проекте слишком много классов и файлов, чтобы я мог опубликовать их все, поэтому я буду публиковать любые классы, которые вам нужны, по запросу.

Это игра на C ++, OpenGL и SDL для Visual Studio 2010. Это не проблема ни для одной из библиотек, поскольку она работала нормально до того, как неожиданно и необъяснимо показала ошибку компоновщика.

РЕДАКТИРОВАТЬ: метод 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 ]

49 голосов
/ 27 июля 2011

SDL_main.h включается автоматически из SDL.h, так что вы всегда получаете неприятный # define.

Просто напишите:

#include <SDL.h>
#undef main

И все должно работать нормально

23 голосов
/ 18 декабря 2013

Другой вариант - определить собственную магистраль с обычными параметрами

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

Это должно избавить от ошибки.

Тогда, если вы не используете эти параметры и хотите избавиться от предупреждения компилятора, вы можете сделать этот трюк в своей основной функции.

(void)argc;
(void)args;
3 голосов
/ 27 июля 2011

Виновным, скорее всего, будет SDL_main.h. Убедитесь, что вы не включили этот файл, там есть неприятное определение:

#define main SDL_main
2 голосов
/ 29 апреля 2018
#define SDL_MAIN_HANDLED
#include "SDL.h"

https://wiki.libsdl.org/SDL_SetMainReady

...