Esto realmente se siente como un error en Qt. ¿Alguien tiene una solución o debería presentarla como un error?No se puede acceder al miembro privado declarado en clase 'QReadWriteLock'Error error C2248:' QReadWriteLock :: QReadWriteLock '
#include <QReadWriteLock>
class FileInfoWrapper {
public:
explicit FileInfoWrapper(const QFileInfo& _fileInfo);
~FileInfoWrapper();
private: // also tried public
mutable QReadWriteLock lock_;
Antes incluso de usarlo, me sale el error:
Error 1 error C2248: 'QReadWriteLock::QReadWriteLock' : cannot access private member declared in class 'QReadWriteLock'
No importa si es privada/pública o qué clases que incluyen. Parece que no puedo crearlo en la pila. En lugar de ello he creado uno en el montón usando 'nuevo', pero cuando trato de eliminarlo en el constructor mis aplicación se bloquea con:
Unhandled exception at 0x5090f39a (QtCored4.dll) in MyApp.exe: 0xC0000005: Access violation reading location 0xfeeeff0e.
Pila de llamadas:
QtCored4.dll!QHash::~QHash() Line 283 + 0xa bytes C++ QtCored4.dll!QReadWriteLockPrivate::~QReadWriteLockPrivate() + 0x38 bytes C++ QtCored4.dll!QReadWriteLockPrivate::`scalar deleting destructor'() + 0xf bytes C++ QtCored4.dll!QReadWriteLock::~QReadWriteLock() Line 137 + 0x1e bytes C++ CloudSync.exe!FileInfoWrapper::~FileInfoWrapper() Line 76 + 0x15 bytes C++
La variable 'd' en QReadWriteLockPrivate parece ser eliminado dos veces. Sin embargo, esto funciona en otra clase donde también tuve que crear el bloqueo en el montón y luego eliminarlo en el constructor.
Ejecutando Qt 4.8.0 en Visual Studio. Tuve el mismo problema en el creador de Qt 4.7.4.
No se puede reproducir con Qt 4.7.4, MinGW, Windows 7 x64. –