0
我在Ubuntu Linux 12.04 LTS上使用Qt 5.2.1。 这里是我的类(.h)中的定义:C++类静态成员初始化
class RtNamedInstance
{
// [... other code here ...]
public:
static int _nextInstanceNumber;
static QMutex _syncObj;
};
,在这里我实现(的.cpp):
#include "rtnamedinstance.h"
// Initialize static members
int RtNamedInstance::_nextInstanceNumber = 0;
QMutex RtNamedInstance::_syncObj(QMutex::Recursive);
RtNamedInstance::RtNamedInstance(QString instanceName)
{
QMutexLocker(&_syncObj); // (*)
// [... other code here ...]
}
编译器出口与上线以下错误标记(*)
:
rtnamedinstance.cpp: In constructor 'RtNamedInstance::RtNamedInstance(QString)': rtnamedinstance.cpp:9:27: error: '_syncObj' declared as reference but not initialized
我错过了什么?
首先你需要定义一个'QMutexLocker' *变量*。现在你有一个表达式来创建一个* temporary *'QMutexLocker'实例,并且一旦该表达式结束(这是立即),实例就会被破坏,并且实际上并没有在该no-op表达式之外锁定任何东西。 –
@JoachimPileborg:我真的是一个愚蠢的男孩......我浪费了几分钟......但是你说得对:我忘了输入QMutexLocker变量名!现在它工作正常......谢谢! –