在 VS2013 建置 C++ 專案時,出現以下連結錯誤:
錯誤 1 error LNK2019: 無法解析的外部符號 "public: void __thiscall Seqlist::Printlist(void)" (?Printlist@?$Seqlist@H@@QAEXXZ),該符號在函數 _wmain 中被引用
錯誤 2 error LNK1120: 1 個無法解析的外部命令
LNK2019 表示宣告了函數但找不到定義(實作)。常見原因:
PrintList vs Printlist。Seqlist::Printlist 的完整簽章。Seqlist 是模板,成員函數實作必須在 .h 或 .inl 中,不能只放在 .cpp。假設頭文件宣告:
template <typename T>
class Seqlist {
public:
void Printlist(); // 宣告
};
實作必須寫在頭文件(或內含的 .inl):
template <typename T>
void Seqlist<T>::Printlist() {
// 實作內容
}
LNK2019 本質是「只有宣告、無定義」。模板類別特別注意實作可見性;非模板類別則檢查 .cpp 是否編入專案、簽章是否完全一致。養成「宣告即定義」或「分離式編譯時同步修改」的習慣可有效避免此錯誤。