我有一个Qt项目,可以在Windows 7或10下很好地构建。当我尝试使用Qt 5.9.1在Centos 7上构建它时,当我尝试使用Qt项目时,出现“无效使用限定名称”错误。静态类成员的地址。例如:
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
{
}
}
我想念什么?
答案 0 :(得分:2)
储物柜的变量名丢失。对于编译器,它看起来像QMutexLocker &myClass::mtxLock;
-像是带有限定名称的局部变量。
您可以这样解决它:
const QMutexLocker lock(&myClass::mtxLock);
Demo (gcc 4.8,因为它是CentOS 7的默认编译器)。
这实际上在Curiously Recurring C++ Bugs at Facebook上的“错误#6”下。