2009-04-21 27 views
0

我似乎無法讓這個未定義的引用消失。未定義的參考?有沒有我沒有看到的東西? (C++,singleton類)

(screenshot of issue)

我下Scene.h的私人部分驗證碼:

static Scene * scene_; 

有一個的#include「Scene.h」在場景的頭的第一個部分。 cpp

這是我目前收到的唯一錯誤,有什麼想法?

我會提供任何你想要的信息。

+0

對不起,我的閱讀理解有點偏離。我刪除了我的答案。 – 2009-04-21 20:42:12

回答

7

在聲明靜態成員,你還必須在一個編譯單元(也是唯一一個)定義它:

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

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

在類的變量不會保留內存的聲明,只是告訴編譯器(來自其他編譯單元)將會有一個變量可以在某處定義的名稱訪問。

1

爲什麼要用Scene*代替Scene?你基本上說「使用static爲指向Scene的指針分配足夠的空間」,然後在運行時將這個Scene對象與new(以及我假設從來沒有delete它)堆放在堆上。

相反,只是有靜態分配並初始化Scene對象:( - >變)

static Scene scene_; 

,然後相應地變更爲現場的所有引用:

scene_.addObject(&object); 

這種情況很容易並減少按鍵啓動。與Java或C#一樣,C++不需要new