我似乎无法让这个未定义的引用消失。
我在 Scene.h 的私有部分下有这段代码:
static Scene * scene_;
Scene.cpp 头文件的第一部分有一个#include "Scene.h"
这是我目前收到的唯一错误,有什么想法吗?
我会提供你想要的任何其他信息。
当您声明一个静态成员时,您还必须在一个编译单元(并且只有一个)中定义它:
// a.h
class A
{
static int x;
};
// a.cpp
int A::x = 0;
类中变量的声明不会保留内存,只是告诉编译器(从其他编译单元)将有一个可以通过在某处定义的名称访问的变量。
为什么使用 aScene*
而不是 a Scene
?您本质上是在说“static
用于为指向 a 的指针分配足够的空间Scene
”,然后在运行时将该Scene
对象放在堆上new
(并且,我假设,永远不会delete
)。
相反,只需静态分配并初始化Scene
对象:
static Scene scene_;
然后相应地更改对场景的所有引用(-> 变为。):
scene_.addObject(&object);
这更容易并且需要更少的击键来启动。C++ 不需要new
像 Java 或 C# 那样频繁。