簡體   English   中英

鏈接器錯誤-未定義的引用

[英]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::liststd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM