2013-01-25 58 views
3

可能重複:
Why do I get 「unresolved external symbol」 errors when using templates?解析外部符號++模板

我想提出一個LinkedList。我正在使用外部迭代器。 Iterator類是一個模板,我正在Iterator.h中實現我的方法。

這裏是模板:1>list_test.obj : error LNK2019: unresolved external symbol "public: void __thiscall list_1::Iterator<double>::operator++(void)"

加上約七其他類似的錯誤在整個項目:

#pragma once 

#include "Node.h" 

namespace list_1 
{ 

template<typename T> 
class Iterator 
{ 
public: 
    Iterator<T> (Node<T> *np); 
    void operator++(); 
    bool is_item(); 
    T operator*(); 

private: 
    Node<T>* n; 
}; 

template<typename T> 
Iterator<T>::Iterator (Node<T> *np) 
{ 

} 

template<typename T> 
void Iterator<T>::operator++() 
{ 

} 

template<typename T> 
bool Iterator<T>::is_item() 
{ 
    return false; 
} 

template<typename T> 
T Iterator<T>::operator*() 
{ 

} 
} 

當我嘗試編譯我收到此錯誤信息。

我在這裏做錯了什麼?或者是我做錯了什麼?

謝謝!

+0

是'list_1'類還是命名空間? 「list_1」定義內部還是外部的'Iterator'類定義? 'list_1'定義之內還是之外的'operator ++'定義? – aschepler

+1

我沒有在'operator'實現前看到'inline',所以我顯然不在模板聲明中的**頭文件**中。除非這是全部在* single * source文件中,否則你不會在沒有明確實例化的情況下得到你想要的。 – WhozCraig

+0

對不起,Iterator位於命名空間list_1中。 'template void Iterator :: operator ++()'也在list_1中。 – KKendall

回答

0

如果我正確地讀取了錯誤信息,那麼您的迭代器將以Node<T>作爲輸入,但是您正在將double應用於它並不適用。要支持non-Node<T>類型,您需要專門Iterator<T>

public: void __thiscall list_1::Iterator<double>::operator++(void)" 
             ^^^^^