我在Ubuntu Linux 12.04 LTS上使用Qt 5.2.1。 这是我的班级(.h)的定义:
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:在构造函数中 ' RtNamedInstance :: RtNamedInstance(QString)':rtnamedinstance.cpp:9:27: 错误:' _syncObj'声明为引用但未初始化
我错过了什么?
答案 0 :(得分:2)
正如@JoachimPileborg所建议的那样,我只是忘记输入QMutexLocker变量名......这在某种程度上混淆了编译器......
正确的代码是(.cpp):
#include "rtnamedinstance.h"
// Initialize static members
int RtNamedInstance::_nextInstanceNumber = 0;
QMutex RtNamedInstance::_syncObj(QMutex::Recursive);
RtNamedInstance::RtNamedInstance(QString instanceName)
{
QMutexLocker locker(&_syncObj);
// [... other code here ...]
}