所以我按照我想要的方式运行单例模式,我认为主要问题是指针和参考。 (“......”表示无关紧要的代码)。
Universe.h
...
#define TheUniverse Universe::GetInstance ();
...
public:
static Universe& GetInstance ();
...
private:
static Universe* x_instance;
...
Universe.cpp
...
Universe* Universe::x_instance = NULL;
...
Universe& Universe::GetInstance ()
{
if ( x_instance == NULL )
{
x_instance = new Universe ();
}
return *x_instance;
}
...
Main.cpp的
...
//This Works
Universe& universe = TheUniverse;
universe.Initialize();
//This also Works
Universe::GetInstance().Initialize();
//This Does Not (and I do not know why)
TheUniverse.Initialize();
//CMake says "error: expected primary-expression before '.' token TheUniverse.Initizlize();"
那么,为什么我必须先将TheUniverse宏设置为变量才能使用它?有没有办法绕过这个而不必使用变量?
答案 0 :(得分:3)
问题是您使用分号将TheUniverse
定义为Universe::GetInstance();
。因此,在处理宏之后,您会得到Universe::GetInstance();.Initialize();
,这显然不是您想要的。要解决此问题,只需删除宏定义中的分号。