代码之家  ›  专栏  ›  技术社区  ›  Jim Rhodes

在Linux上对Qt使用限定名无效

  •  0
  • Jim Rhodes  · 技术社区  · 6 年前

    我有一个Qt项目,它在windows7或windows10下构建得很好。当我尝试使用qt5.9.1在centos7上构建它时,当我尝试获取静态类成员的地址时,会出现“使用限定名无效”错误。例如:

    我的班级.h

    class myClass : public QObject
    {
      Q_OBJECT
      . . .
      static QMutex  mtxLock;
      static QHash<QString, QString> hshMap;
    };
    

    我的班级.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 回复  |  直到 6 年前
        1
  •  2
  •   Mihayl    6 年前

    缺少储物柜的变量名。对于编译器来说 QMutexLocker &myClass::mtxLock;

    你可以这样修理它:

    const QMutexLocker lock(&myClass::mtxLock);
    

    Demo (GCC4.8,因为它是CentOS 7默认编译器)。

    这实际上是在 Curiously Recurring C++ Bugs at Facebook .