我有一个在Windows 7或10下可以正常构建的Qt项目。当我尝试使用Qt 5.9.1在Centos 7上构建它时,当我尝试获取A的地址时出现“无效使用限定名称”错误。静态类成员。例如:
myClass.h
class myClass : public QObject
{
Q_OBJECT
. . .
static QMutex mtxLock;
static QHash<QString, QString> hshMap;
};
myClass.cpp
QMutex myClass::mtxLock;
QHash<QString, QString> myClass::hshMap {{"key", "value"}};
void myClass::myFunction()
{
QMutexLocker(&myClass::mtxLock); // Invalid use of qualified-name
if ( myClass::hshMap.contains("key") ) // No error
{
}
}
我想念什么?
最佳答案
储物柜的变量名丢失。对于编译器,它看起来是QMutexLocker &myClass::mtxLock;
-类似于具有限定名称的局部变量。
您可以这样解决:
const QMutexLocker lock(&myClass::mtxLock);
Demo(gcc 4.8,因为它是CentOS 7的默认编译器)。
这实际上在Curiously Recurring C++ Bugs at Facebook上的“错误6”下。