Не удается получить доступ к частному члену, объявленному в классе 'QReadWriteLock'Ошибка 1 error C2248:'QReadWriteLock::QReadWriteLock'

Это действительно похоже на ошибку в Qt. У кого-нибудь есть решение или я должен зарегистрировать его как ошибку?

#include <QReadWriteLock>

class FileInfoWrapper {

public:
    explicit FileInfoWrapper(const QFileInfo& _fileInfo);
    ~FileInfoWrapper();

private: // also tried public
    mutable QReadWriteLock lock_;

Прежде чем использовать его, я получаю сообщение об ошибке:

Ошибка 1 error C2248:'QReadWriteLock::QReadWriteLock' :не может получить доступ к частному члену, объявленному в классе 'QReadWriteLock'

Не имеет значения, если это частный/публичный или какие классы я включаю. Кажется, я не могу создать его в стеке. Вместо этого я создал один в куче, используя «новый», но когда я пытаюсь удалить его в конструкторе, мое приложение падает с:

необработанным исключением по адресу 0x5090f39a (QtCored4.dll )в MyApp.exe :0xC0000005 :Местоположение чтения нарушения доступа 0xfeeeff0e.

Стек вызовов:

QtCored4.dll!QHash::~QHash()Строка 283 + 0xa байт C++ QtCored4.dll!QReadWriteLockPrivate::~QReadWriteLockPrivate()+ 0x38 байт C++ QtCored4.dll!QReadWriteLockPrivate::`скалярный деструктор удаления'()+ 0xf байт C++ QtCored4.dll!QReadWriteLock::~QReadWriteLock()Строка 137 + 0x1e байт C++ CloudSync.exe!FileInfoWrapper::~FileInfoWrapper()Строка 76 + 0x15 байт C++

Похоже, что переменная 'd' в QReadWriteLockPrivate была удалена дважды. Однако это работает в другом классе, где мне также пришлось создать блокировку в куче, а затем удалить ее в конструкторе.

Запуск Qt 4.8.0 в Visual Studio. Была такая же проблема в Qt Creator 4.7.4.

5
задан chikuba 1 March 2012 в 00:29
поделиться