[英]Error: LNK2001: unresolved external symbol "private: static class
該論壇包含許多這種情況的示例,但是在我的情況下,正確定義了靜態變量,但是仍然出現該錯誤。 因此,此問題不是先前鏈接的重復,也無法回答該問題。 建議的21個答案帖子沒有解決方案,西蒙在這里給我,請取消標記為“重復”。
似乎我已經正確聲明了所有內容,請檢查以下內容:
.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)
問題可能出在哪里?
從鏈接命令中可以看出,您正在將對象鏈接到一個DLL中,然后在第二步中將DLL與最終的二進制文件鏈接起來。 這可能是由項目設置中的subdirs模板引起的。
每當您想從外部使用DLL方法時,都需要通過__declspec(dllexport)使它可用。 我想這是在您的自定義預編譯器常量DLLEXPORT
。
現在,在您的.h文件中嘗試以下操作:
static DLLEXPORT QStandardItemModel *drugsModel();
static DLLEXPORT QStandardItemModel *substanceModel();
static DLLEXPORT QStandardItemModel *reactionsModel();
使這些方法可從DLL外部使用。
順便說一句:如果您只是鏈接自己項目中的內容並且不需要將其提供給他人,那么我認為這里沒有中間動態庫(DLL)是沒有意義的。 考慮通過使用靜態庫來代替,方法是在CONFIG += staticlib
所在的.pro
文件中設置TEMPLATE = lib
和CONFIG += staticlib
。但這是另一個主題和另一個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.