2009-08-08 12 views
1

私は、public static int theMaxFramesが存在するMODELというクラスを持っています。クラスは独自のヘッダファイルで定義されています。 theMaxFramesは、MODELクラス内のクラスと、MODELクラスにもあるvoid set_up()という1つの関数によってアクセスされます。 Render.cppソースファイルには、Direct3D.cppソースファイル内の関数を呼び出す関数が含まれています。この関数は、MODELオブジェクトを通じてset_up()関数を呼び出します。これは、これらの2つのソースファイルとMaxFrames間の唯一の接続です。Visual C++リンカーエラー

私は私のコードをコンパイルしようとすると、私は次のエラーメッセージが出ます:

1> Direct3D.obj:エラーLNK2001:未解決の外部シンボル? "パブリック:静的int型MODEL :: theMaxFrames"(MODEL @ theMaxFrames @ @ 2HA)

1> Render.obj:エラーLNK2001:未解決の外部シンボル? "パブリック:静的int型MODEL :: theMaxFrames"(2HA @@ MODEL @ theMaxFrames)

1> C:\ Users \ユーザーバイロン\ Documents \ Visual Studio 2008 \ Projects \ xFileViewer \ Debug \ xFileViewer.exe:致命的なエラーLNK1120:1未解決の外部

答えて

2

あなたはクラス内でtheMaxFramesを宣言したように聞こえるが、その定義は与えていない。

この場合、.cppのどこかに定義を提供する必要があります。

int MODEL::theMaxFrames; 

この質問のFAQエントリはstatic data membersです。

+0

ありがとうございました!これで解決しました。しかし、なぜこれが必要なのか分かりません。必要な洞察力を提供することはできますか? – LordByron

+0

これは言語要件です。あるクラスに静的変数を宣言する場合は、そのクラス本体の外側の定義をどこかで指定する必要があります。 –

+0

ヘッダーファイルには可変割り当てが含まれていないためです。実行可能ファイルに存在する必要のあるものは、どこかのCPPファイルで宣言する必要があります。ヘッダーは、さまざまなソースファイル間の契約であり、物事を提供します。ソースファイルは、ヘッダーで指定されたコントラクトを満たす実装です。契約を満たすことができない場合、リンカエラーが発生します。 –

関連する問題