Ошибка Ogre 3D — LNK1120: 1 неразрешенная внешность

Я пришел в второй учебник по Огре на Ogre wiki переименовал файлы в соответствии с инструкциями из учебника и заменил код, но я получаю эту ошибку:

    1>------ Build started: Project: Flight Simulator, Configuration: Debug Win32 ------
1>BaseApplication.obj : warning LNK4075: ignoring '/EDITANDCONTINUE' due to        '/INCREMENTAL:NO' specification
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
1>C:\Users\Jura\Documents\Visual Studio 2010\Projects\Flight Simulator\Debug\Flight Simulator.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Я уже гуглил, но, похоже, не нашел ответа.

Это код из BasicTutorial2.cpp:

#include "BasicTutorial2.h"
//-------------------------------------------------------------------------------------
BasicTutorial2::BasicTutorial2(void)
{
}//-------------------------------------------------------------------------------------
BasicTutorial2::~BasicTutorial2(void)
{
}

//-------------------------------------------------------------------------------------
void BasicTutorial2::createCamera(void)
{
}

//-------------------------------------------------------------------------------------
void BasicTutorial2::createViewports(void)
{
}

//-------------------------------------------------------------------------------------
void BasicTutorial2::createScene(void)
{
}

Это по моему BasicTutorial2.h файл:

/*
-----------------------------------------------------------------------------
Filename:    BasicTutorial2.h
-----------------------------------------------------------------------------

This source file is part of the
___                 __    __ _ _    _
/___\__ _ _ __ ___  / / /\ \ (_) | _(_)
//  // _` | '__/ _ \ \ \/  \/ / | |/ / |
/ \_// (_| | | |  __/  \  /\  /| |   <| |
\___/ \__, |_|  \___|   \/  \/ |_|_|\_\_|
|___/
Tutorial Framework
http://www.ogre3d.org/tikiwiki/
-----------------------------------------------------------------------------
*/
#ifndef __BasicTutorial2_h_
#define __BasicTutorial2_h_

#include "BaseApplication.h"
class BasicTutorial2 : public BaseApplication
{
public:
BasicTutorial2(void);
virtual ~BasicTutorial2(void);

protected:
virtual void createScene(void);
virtual void createCamera(void);
virtual void createViewports(void);
};

#endif // #ifndef __BasicTutorial2_h_

В каталоге у меня тоже есть BaseApplication.cpp а также stdafx.cpp и конечно же их заголовочные файлы (BaseApplication.h а также stdafx.h).

Итак, это моя структура каталогов:

Header files
stdafx.h;
BaseApplication.h;
BasicTutorial2.h;

Source files
stdafx.cpp;
BaseApplication.cpp;
BasicTutorial2.cpp;

Я надеюсь, что кто-то даст мне решение. Я попытался изменить подсистему с «Windows» на «Консоль», но безуспешно. Я тоже пробовал другие решения, но тоже не повезло.

0

Решение

Ответ: Я забыл добавить функцию main (win) в BasicTutorial2.cpp:

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"#endif

#ifdef __cplusplus
extern "C" {
#endif

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char *argv[])
#endif
{
// Create application object
BasicTutorial2 app;

try {
app.go();
} catch( Ogre::Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
std::cerr << "An exception has occured: " <<
e.getFullDescription().c_str() << std::endl;
#endif
}

return 0;
}

#ifdef __cplusplus
}
#endif

Итак, BasicTutorial2.cpp в итоге выглядит так:

#include "BasicTutorial2.h"
//-------------------------------------------------------------------------------------
BasicTutorial2::BasicTutorial2(void)
{
}//-------------------------------------------------------------------------------------
BasicTutorial2::~BasicTutorial2(void)
{
}

//-------------------------------------------------------------------------------------
void BasicTutorial2::createCamera(void)
{
}

//-------------------------------------------------------------------------------------
void BasicTutorial2::createViewports(void)
{
}

//-------------------------------------------------------------------------------------
void BasicTutorial2::createScene(void)
{
}

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"#endif

#ifdef __cplusplus
extern "C" {
#endif

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char *argv[])
#endif
{
// Create application object
BasicTutorial2 app;

try {
app.go();
} catch( Ogre::Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
std::cerr << "An exception has occured: " <<
e.getFullDescription().c_str() << std::endl;
#endif
}

return 0;
}

#ifdef __cplusplus
}
#endif

Так что для других уроков просто измените названия соответственно. Найдите BasicTutorial2 и замените его, например, с BasicTutorial3 и переименуйте файлы и никогда не удаляйте функцию main (), так как это вызовет много ненужных головных болей.

0

Другие решения

Других решений пока нет …