我正在将我当前的游戏引擎与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
};引擎的声明是正确的,并且单例的执行情况与预期一致。有什么想法吗?
发布于 2013-05-03 01:37:28
可以在这里找到对C2227的解释:Compiler Error C2227。
当编译器运行到这一行时:
soundEngine->drop(); //C2227它告诉你为了调用drop(),soundEngine必须是指向类/结构/联合的指针。这里的实际问题是,您试图从静态函数访问非静态数据成员。
还要注意的是,delete不会改变指针本身的值,所以在执行这一行之后:
delete instance;instance的值仍设置为相同的地址,此指针已变为无效(悬空)。在对指针执行delete操作后,为指针分配NULL是一种好做法:
delete instance;
instance = NULL;https://stackoverflow.com/questions/16344156
复制相似问题