0

Ogre wiki の2 番目の Ogre チュートリアルに来て、チュートリアルの指示に従ってファイルの名前を変更し、コードを置き換えましたが、次のエラーが発生しました。

    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.cppBaseApplication.hstdafx.h

だから、これは私のディレクトリ構造です:

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

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

誰かが私に解決策を教えてくれることを願っています。サブシステムを「Windows」から「Console」に変更しようとしましたが、うまくいきませんでした。他の解決策も試しましたが、うまくいきませんでした。

4

1 に答える 1

0

回答: BasicTutorial2.cpp に main (win) 関数を追加するのを忘れていました。

#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() 関数を決して削除しないでください。不要な頭痛の原因となるためです。

于 2014-03-05T10:48:06.850 に答える