我正在努力将我当前的游戏引擎与irrKlang声音引擎集成,并且正在处理持续性错误。简化为:
fsCore.h
class fsEngine
{
public:
static fsEngine *getInstance();
static void release();
;
private:
static fsEngine *instance;
static fsBool exists;
irrklang::ISoundEngine *soundEngine;
};
fsCore.cpp
#include "fsCore.h"
void fsEngine::release()
{
exists = false;
delete instance;
soundEngine->drop(); //C2227
};
引擎正确声明,单例按预期执行。有什么想法吗?
答案 0 :(得分:4)
可在此处找到C2227的说明:Compiler Error C2227。
编译器到达此行时:
soundEngine->drop(); //C2227
它告诉你soundEngine
必须是指向class / struct / union的指针才能在其上调用drop()
。这里的实际问题是您尝试从静态函数访问非静态数据成员。
另请注意,delete
不会更改指针本身的值,因此在执行此行之后:
delete instance;
instance
的值仍然设置为相同的地址,此指针变为无效(悬空)。最好在NULL
之后将delete
指定给指针:
delete instance;
instance = NULL;