c++ - 在 Linux 上使用 Qt 的限定名无效

标签 c++ qt

我有一个在 Windows 7 或 10 下构建得很好的 Qt 项目。当我尝试使用 Qt 5.9.1 在 Centos 7 上构建它时,当我尝试使用静态类成员的地址。例如:

我的类.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
  {
  }
}

我错过了什么?

最佳答案

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

你可以这样修复它:

const QMutexLocker lock(&myClass::mtxLock);

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

这实际上是在 Curiously Recurring C++ Bugs at Facebook 上的“Bug #6”下.

关于c++ - 在 Linux 上使用 Qt 的限定名无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52613362/

相关文章:

c++ - 在非唯一集合上使用 erase-remove 习语

c++ - 使用 std::ranges::min 投影到 std::map

QT如何检测系统托盘区域以创建系统弹出窗口

android - qt for android 找不到我的物理设备

qt - QML 中有哪些对象具有 Active Focus?

c++ - 解释这个素数程序 [C]

c++ - 如何以依赖于模板类型名的方式提高 C++ 模板的精度?

c++ - 在 Mac 上编写 C++ 的最佳环境是什么?

linux - Qt的可链接报告库,带有编辑器或简单标记

qt - QString::arg()的参数中如何处理 “%1”?