簡體   English   中英

未定義參考模板Const和函數

[英]Undefined Reference to a template Const & function

函數頭:(模板化的外部類映射具有內部類迭代器)

Iterator insert(const std::pair<const T1, T2>&);

功能實施:

template<typename T1, typename T2>
typename Map<T1,T2>::Iterator insert(const std::pair<const T1, T2> &p)

調用插入函數的代碼:

std::pair<int,char>p = std::make_pair(5, 'z');
mymap3.insert(p);

使用g ++ -g -std = c ++ 11進行編譯,錯誤:

 In function `main':
testmap.cpp:535: undefined reference to 
Map<int, char>::insert(std::pair<int const, char> const&)'
collect2: error: ld returned 1 exit status

為什么編譯器現在定義insert(對const&)而不是我對(const pair&)的定義是否存在差異? 我不恰當地稱呼這個嗎? 我很迷惑。 是的,這是為了上課,我們正在重新實施地圖。 所以函數定義是給定的,我只需要找出如何調用它並使其工作。

這個功能:

template<typename T1, typename T2>
typename Map<T1,T2>::Iterator insert(const std::pair<const T1, T2> &p)

當在Map的類定義之外聲明時,它不是成員函數 - 它定義了一個全局insert

這是在命名空間范圍內聲明的Map<T1, T2>的成員(即,在類定義之外):

template<typename T1, typename T2>
typename Map<T1,T2>::Iterator Map<T1,T2>::insert(const std::pair<const T1, T2> &p)

請注意,成員函數名稱已由類名限定,在本例中為Map<T1, T2>

在相關的說明中,使用尾隨返回類型可以讓你擺脫返回類型中的一些骯臟,因為尾隨返回類型中的名稱在類的范圍內被解析:

template<typename T1, typename T2>
auto Map<T1, T2>::insert(const std::pair<const T1, T2> &p) -> Iterator;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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