3

さて、私は何日もこれに苦労してきました。CryENGINE 用のカスタム ゲーム DLL を最初から作成していますが、1 つの単純なクラス (Game.cpp) とプリコンパイル済みヘッダー (StdAfx.h) でソリューションをコンパイルすることさえできません。

Game.cpp と StdAfx.cpp はどちらも単独で完全にコンパイルされますが、ソリューションをコンパイルすると、大量の乗算定義エラーがスローされます。定義は単なるプレースホルダーであるため、クラスは単純です。

ゲーム.h

#if !defined __GAME__H__
#define __GAME__H__

#pragma once

class CGame : public IGame
{
public:
CGame();
VIRTUAL ~CGame();

//IMPLEMENT: IGame Interface, all methods declared.
};
#endif

ゲーム.cpp

 #include "StdAfx.h" //PreComp header
 #include "Game.h"

 //Define all methods, each one has a simple definition.

StdAfx.h

#if !defined __STDAFX__H__
#define __STDAFX__H__

#pragma once

//Various CryENGINE includes

#endif

出力

error LNK2005: "struct SSystemGlobalEnvironment * gEnv" (?  gEnv@@3PEAUSSystemGlobalEnvironment@@EA) already defined in StdAfx.obj
error LNK2005: "public: static long volatile _CryMemoryManagerPoolHelper::allocatedMemory" (?allocatedMemory@_CryMemoryManagerPoolHelper@@2JC) already defined in StdAfx.obj
error LNK2005: "public: static long volatile _CryMemoryManagerPoolHelper::freedMemory" (?freedMemory@_CryMemoryManagerPoolHelper@@2JC) already defined in StdAfx.obj
error LNK2005: "public: static long volatile _CryMemoryManagerPoolHelper::requestedMemory" (?requestedMemory@_CryMemoryManagerPoolHelper@@2JC) already defined in StdAfx.obj
error LNK2005: "public: static int volatile _CryMemoryManagerPoolHelper::numAllocations" (?numAllocations@_CryMemoryManagerPoolHelper@@2HC) already defined in StdAfx.obj

The list goes on...

本当に私をうんざりさせるのは、それぞれが個別にうまくコンパイルされるため、構文と参照が優れていることです。ソリューション全体をコンパイルしたときに、多重定義エラーが発生する可能性があるのは何ですか?

このイライラする問題について助けていただき、本当にありがとうございます。

4

2 に答える 2

4

プリコンパイル済みヘッダーが原因でエラーが発生したかどうかはわかりませんが、プリコンパイル済みヘッダーを設定する正しい方法は次のとおりです。

  1. ソリューション エクスプローラーでプロジェクト名を右クリックし、[プロパティ] を選択して、[構成プロパティ] | [構成プロパティ]に移動します。C/C++ | Precompiled Headersを選択し、Precompiled Header設定をUse (/Yu)に設定します。その下の他の 2 つの設定はデフォルトのままにします。

  2. StdAfx.cpp を右クリックし、同じ設定に移動してCreate (/Yc)に設定します。

于 2013-02-06T08:56:19.187 に答える
1

さて、私はそれを理解しました。プリコンパイル済みヘッダーに属さない巧妙な複雑なインクルードがあります。

#include <Platform_Impl.h> 

これが私のすべての問題の原因であり、それを Game.cpp に移動することで、すべてがうまくいきました。

于 2013-02-06T14:15:00.597 に答える