【发布时间】:2015-12-31 03:54:04
【问题描述】:
这个论坛包含很多这种情况的例子,但在我的例子中,静态变量是正确定义的,但是我仍然得到那个错误。所以这个问题不重复之前和上面的链接没有回答这个问题。建议的21 answers post 没有西蒙在这里给我的解决方案,请取消标记为“重复”。
看来我已经全部正确地声明了,检查一下:
.h 文件:
class ValueSetsModelsContainer : public QObject
{
Q_OBJECT
public:
static void DLLEXPORT loadAllergiesValueSets(MPTDatabase *db);
static void DLLEXPORT loadProceduresValueSets(MPTDatabase *db);
// Models access functions
static QStandardItemModel *drugsModel();
static QStandardItemModel *substanceModel();
static QStandardItemModel *reactionsModel();
private:
static QStandardItemModel *myDrugsModel, *mySubstanceModel, *myReactionsModel;
};
.cpp:
QStandardItemModel *ValueSetsModelsContainer::myDrugsModel = 0;
QStandardItemModel *ValueSetsModelsContainer::mySubstanceModel = 0;
QStandardItemModel *ValueSetsModelsContainer::myReactionsModel = 0;
QStandardItemModel *ValueSetsModelsContainer::drugsModel()
{
return ValueSetsModelsContainer::myDrugsModel;
}
QStandardItemModel *ValueSetsModelsContainer::substanceModel()
{
return ValueSetsModelsContainer::mySubstanceModel;
}
QStandardItemModel *ValueSetsModelsContainer::reactionsModel()
{
return ValueSetsModelsContainer::myReactionsModel;
}
所以静态变量是在 cpp 中定义的,但是我仍然在另一个调用 ValueSetsModelsContainer 方法的模块中遇到链接错误:
- allergiesdialog.obj:-1:错误:LNK2001:未解析的外部符号 “私有:静态类 QStandardItemModel * ValueSetsModelsContainer::myDrugsModel" (?myDrugsModel@ValueSetsModelsContainer@@0PAVQStandardItemModel@@A)
- allergiesdialog.obj:-1:错误:LNK2001:无法解析的外部符号“私有:静态类 QStandardItemModel *
ValueSetsModelsContainer::mySubstanceModel"
(?mySubstanceModel@ValueSetsModelsContainer@@0PAVQStandardItemModel@@A)- allergiesdialog.obj:-1:错误:LNK2001:无法解析的外部符号“私有:静态类 QStandardItemModel *
ValueSetsModelsContainer::myReactionsModel"
(?myReactionsModel@ValueSetsModelsContainer@@0PAVQStandardItemModel@@A)
问题可能出在哪里?
【问题讨论】:
-
不是重复的,上面的链接没有回答我的问题。
-
您是否将所有对象(已编译的 cpp 文件)直接链接到最终二进制文件中?或者你有一些图书馆参与?您能否添加您的 .pro 文件以使项目结构清晰?
-
似乎是的 - 直接。 PRO 和包含的 PRI 非常大 - 此处包含许多 cpp 和 h 文件。
-
在你的 .h 文件中试试这个
static DLLEXPORT QStandardItemModel *drugsModel(); -
投票重新打开,以便评论可以转换为答案。这对我来说不像是一个骗局。
标签: c++ qt dll linker-errors