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 is included automatically from SDL.h, so you always get the nasty #define.

Just write:

#include <SDL.h>
#undef main

And it should work fine

于 2011-07-27T16:24:18.220 に答える
40

別のオプションは、実際には通常のパラメーターを使用して独自のメインを定義することです

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

これでエラーが解消されるはずです。

次に、これらのパラメーターを使用せず、コンパイラーの警告も取り除きたい場合は、メイン関数でそのトリックを行うことができます。

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

SDL ドキュメントのデフォルト ソリューション:

tl;dr:

#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 に答える