0

この未定義の参照をなくすことはできないようです。

(問題のスクリーンショット)

Scene.h のプライベート セクションに次のコードがあります。

static Scene * scene_;

Scene.cpp のヘッダーの最初の部分に #include "Scene.h" があります。

これは私が現在受け取っている唯一のエラーです。何かアイデアはありますか?

その他必要な情報を提供します。

4

2 に答える 2

7

静的メンバーを宣言するときは、それを 1 つのコンパイル単位 (そして 1 つのみ) で定義する必要があります。

// a.h
class A
{
   static int x;
};

// a.cpp
int A::x = 0;

クラス内の変数の宣言はメモリを予約しません。どこかで定義されたその名前でアクセスできる変数があることを (他のコンパイル ユニットから) コンパイラに伝えるだけです。

于 2009-04-21T20:37:03.887 に答える
1

Scene*の代わりに a をScene使用する理由 あなたは本質的に「staticへのポインターに十分なスペースを割り当てるために使用する」と言ってSceneおり、実行時にそのSceneオブジェクトをヒープに配置しますnew(そして、決してdeleteそうではないと思います)。

代わりに、オブジェクトを静的に割り当てて初期化します。Scene

static Scene scene_;

それに応じてシーンへのすべての参照を変更します (-> になります。):

scene_.addObject(&object);

これはより簡単で、起動に必要なキーストロークが少なくて済みます。newC++ は、Java や C# ほど頻繁には必要ありません。

于 2009-04-21T22:54:23.213 に答える