web-dev-qa-db-fra.com

erreur LNK2019: symbole externe non résolu _main référencé dans la fonction ___tmainCRTStartup, mais cette fois ce n'est PAS un problème Windows / Console!

Ainsi, la tristement célèbre erreur est de retour. Le projet se plaint de ne pas trouver la méthode main () (c'est ce que l'erreur signifie, à droite).

Cependant, j'ai un principal et mon projet est un projet de console, comme il se doit. Cela a fonctionné avant, donc je sais que ce n'est pas ça.

De plus, le projet a trop de classes et de fichiers pour que je puisse tous les poster, donc je posterai toutes les classes dont vous avez besoin sur demande.

Il s'agit d'un jeu C++, OpenGL et SDL sur Visual Studio 2010. Ce n'est un problème d'aucune des bibliothèques, car cela fonctionnait bien avant qu'il ne montre soudainement et inexplicablement cette erreur de l'éditeur de liens.

EDIT: La méthode 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;
}
20
OddCore

SDL_main.h est inclus automatiquement à partir de SDL.h, vous obtenez donc toujours le méchant #define.

Ecrivez:

#include <SDL.h>
#undef main

Et cela devrait bien fonctionner

52
rodrigo

Une autre option serait en fait de définir votre propre main avec les paramètres habituels

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

Cela devrait éliminer l'erreur.

Ensuite, si vous n'utilisez pas ces paramètres et que vous souhaitez également vous débarrasser de l'avertissement du compilateur, vous pouvez faire cette astuce dans votre fonction principale.

(void)argc;
(void)args;
26
ForceMagic

Le coupable est probablement SDL_main.h. Vérifiez que vous n'incluez pas ce fichier, il y a une méchante définition:

#define main SDL_main
3
tibur
#define SDL_MAIN_HANDLED
#include "SDL.h"

https://wiki.libsdl.org/SDL_SetMainReady

3
jens