Инициализация статического члена класса 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 ...]
}