我正在努力将我当前的游戏引擎与 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
};
引擎声明正确,单例运行符合预期。有什么想法吗?
最佳答案
可在此处找到 C2227 的说明:Compiler Error C2227 .
当编译器到达这一行时:
soundEngine->drop(); //C2227
它告诉您 soundEngine
必须是指向类/结构/union 的指针才能对其调用 drop()
。这里的实际问题是您试图从静态函数访问非静态数据成员。
另请注意,delete
不会更改指针本身的值,因此在执行此行后:
delete instance;
instance
的值仍设置为同一地址,此指针已无效(悬空)。在您删除
之后将指针分配给 NULL
是一个很好的做法:
delete instance;
instance = NULL;
关于c++ - 为什么此代码会生成编译器错误 C2227?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344156/