2009-04-21 30 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