0

我似乎无法让这个未定义的引用消失。

(问题截图)

我在 Scene.h 的私有部分下有这段代码:

static Scene * scene_;

Scene.cpp 头文件的第一部分有一个#include "Scene.h"

这是我目前收到的唯一错误,有什么想法吗?

我会提供你想要的任何其他信息。

4

2 回答 2

7

当您声明一个静态成员时,您还必须在一个编译单元(并且只有一个)中定义它:

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

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

类中变量的声明不会保留内存,只是告诉编译器(从其他编译单元)将有一个可以通过在某处定义的名称访问的变量。

于 2009-04-21T20:37:03.887 回答
1

为什么使用 aScene*而不是 a Scene?您本质上是在说“static用于为指向 a 的指针分配足够的空间Scene”,然后在运行时将该Scene对象放在堆上new(并且,我假设,永远不会delete)。

相反,只需静态分配并初始化Scene对象:

static Scene scene_;

然后相应地更改对场景的所有引用(-> 变为。):

scene_.addObject(&object);

这更容易并且需要更少的击键来启动。C++ 不需要new像 Java 或 C# 那样频繁。

于 2009-04-21T22:54:23.213 回答