我有一个在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”下。

10-07 19:29
查看更多