Это действительно похоже на ошибку в 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.