Инициализация статического члена класса C++

Я использую Qt 5.2.1 на Ubuntu Linux 12.04 LTS. Вот определение моего класса (.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 ответ

Решение

По предложению @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 ...]
}
Другие вопросы по тегам