[英]Linker errors - undefined references
是的,我知道這已經被問過十億遍了,我已經檢查了至少100個該問題的重復項,但仍然沒有找到答案。
我正在獲得所有LList
函數的undefined reference
錯誤,盡管似乎所有這些都已正確定義和鏈接。 由於我的代碼太長了,無法粘貼到這里,所以我做了一個粘貼: 點擊
我用以下代碼編譯我的代碼: g++ driver.cpp box.cpp LList.cpp Song.cpp Album.cpp -o driver
類或函數template
不是類或函數,因此不能像類或函數一樣放置在.cpp
文件中。 相反, template
是如何制作類或函數(即模板的特定實例化 )的藍圖 。
您可以通過兩種方式解決問題:
1要么將所有模板化代碼放入各自的頭文件中。
2或在.cpp
文件中顯式實例化代碼。 例如
// Llist.cpp
#include Llist.hpp
#include Sonc.hpp
/* definition of members of Llist<> */
template class Llist<Song>; // creates class Llist<Song>
解決方案1始終有效,但可能具有巨大的頭文件,並向用戶公開所有(或大多數)實現細節。 解決方案2避免了巨大的標頭,並隱藏了實現細節,但是要求您知道您實際需要的實例化(通常是不可能的,尤其是對於鏈表這樣的通用概念而言)。
最后,解決方案3 :使用C ++標准庫( std::list
, std::forward_list
),不用擔心。
模板類和函數必須內聯定義。 那就是問題所在。 例如:
//box.h
#ifndef BOX_H
#define BOX_H
template <typename DataType>
struct box
{
DataType data;
box<DataType> *next;
box(DataType d, box<DataType>* n)
{
data = d;
next = n;
}
};
#endif
並刪除.cpp文件; 您應該對LList.h / cpp做同樣的事情
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.