首頁 > 後端開發 > C++ > 為什麼我會收到模板類別建構函式的'未定義引用”錯誤,以及如何修復它們?

為什麼我會收到模板類別建構函式的'未定義引用”錯誤,以及如何修復它們?

Susan Sarandon
發布: 2024-12-12 19:58:10
原創
733 人瀏覽過

Why Do I Get

「未定義引用」模板類別建構子[重複]

模板類別建構子的編譯器錯誤「未定義引用...」表示缺少明確實例化程序中使用的特定模板類別的說明。出現此問題的原因是編譯器在明確需要模板程式碼之前不會自動編譯模板程式碼。

解決方案 1:明確模板實例化

將明確模板實例化語句附加到實現文件的末尾(可樂)在本例中為.cpp):

template class cola<float>;
template class cola<string>;
登入後複製

此外,請將以下行包含在nodo_colaypila.cpp:

template class nodo_colaypila<float>;
template class nodo_colaypila<std::string>;
登入後複製

這會強制編譯器編譯所需的模板類別。

解 2:在頭檔中包含實作

從 cola 移動實作碼.cpp 和 nodo_colaypila.cpp 分別轉換為 cola.h 和 nodo_colaypila.h。這確保了使用模板類別的所有翻譯單元中函數定義的可用性。

每個解決方案的優缺點:

  • 解決方案1:

    • Pro:更高效,因為它只編譯必要的模板
    • 缺點:需要手動實例化每個所需的模板類別。
  • 解決方案2:

    • Pro:更方便、更靈活,因為它允許將來的模板類
    • 缺點:由於每個翻譯單元重複產生程式碼,編譯速度可能會變慢。

程式碼中的其他拼字錯誤:

  • cola.h中的指標語法不符聲明:
nodo_colaypila<T><T>* ult, pri;
登入後複製

應該是:

nodo_colaypila<T>* ult, *pri;
登入後複製
  • nodo_colaypila.h 末尾缺少 #endif。
  • nodo_colaypila 的預設參數建構子應該在頭檔中定義,而不是在實作中定義。

以上是為什麼我會收到模板類別建構函式的'未定義引用”錯誤,以及如何修復它們?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板