我有一个在 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/