C ++类静态成员初始化

时间:2014-05-21 08:20:43

标签: c++ qt qt5

我在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'声明为引用但未初始化

我错过了什么?

1 个答案:

答案 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 ...]
}