c++ - 单独类中对静态成员 quint64/QMutex 的未定义引用
问题描述
我有几个类给出了这个奇怪的未定义参考问题。这里有两个开始的例子:
备份管理器.h
class BackupManager : public QObject {
Q_OBJECT
const QString TAG = QString("BackupManager");
public:
//...
signals:
//...
public slots:
//...
private:
// Intermediatory storage map for file information
static quint64 bytesSavedDedulication; <-------------- static member
static quint64 bytesSavedLocalDuplication; <-------------- static member
static quint64 bytesSavedGlobalDuplication; <-------------- static member
static quint64 numberOfFilesShouldBeCopied; <-------------- static member
//...
}
备份管理器.cpp
//...
path\to\project\libs\backupmanager.cpp:720: error: undefined reference to `BackupManager::bytesSavedLocalLock'
path\to\project\libs\backupmanager.cpp:721: error: undefined reference to `BackupManager::bytesSavedLocalDuplication'
//...
和另一个例子
数据库管理器.h
class DatabaseManager {
//...
private:
// Mutex preventing concurrent access
static QMutex dbLock; <-------------notice that it is static
//...
}
数据库管理器.cpp
path\to\project\libs\databasemanager.cpp:431: error: undefined reference to `DatabaseManager::dbLock'
静态成员在尝试在代码中访问它们时会给出未定义的引用,正如您在 cpp 行引用中看到的那样。
根据经验,我知道未定义的引用通常意味着头文件中的方法声明没有定义,但这是我以前没有遇到过的问题。
这篇文章建议尝试定义成员。这样做是为了static quint64 bytesSavedDedulication;
:
static quint64 bytesSavedDedulication = 0;
给出以下错误:
path\to\project\libs\backupmanager.h:312: error: non-const static data member must be initialized out of line
什么可能导致这个问题?
(如果需要更多信息,请告诉我 - 很乐意提供)
解决方案
推荐阅读
- c# - 如何从已经与机器人交互的用户的“列表聊天”图形 API 获取团队唯一 ID
- c++ - 用相同的参数声明两个构造函数的最典型的方式是什么?
- python-3.x - centos7 pyodbc安装问题
- r - TraMineR,如何检索聚类分数
- javascript - 使用 Promise.all 时出错:TypeError:中间值不可迭代
- ajax - 如何让我的 ajax 使用我的数量?
- flask - 使用烧瓶执行器同时搜索 2 个表
- javascript - 如何在javascript上导入和导出异步函数?
- java - 如何乘以用户输入的数组?
- amazon-web-services - AWS AppSync 解析器 Lambda 函数与速度模板语言 (VTL)