在Linux上Qt无效使用合格名称

时间:2018-10-02 17:23:01

标签: c++ qt

我有一个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
  {
  }
}

我想念什么?

1 个答案:

答案 0 :(得分:2)

储物柜的变量名丢失。对于编译器,它看起来像QMutexLocker &myClass::mtxLock;-像是带有限定名称的局部变量。

您可以这样解决它:

const QMutexLocker lock(&myClass::mtxLock);

Demo (gcc 4.8,因为它是CentOS 7的默认编译器)。

这实际上在Curiously Recurring C++ Bugs at Facebook上的“错误#6”下。