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