2013-04-20 36 views
0

的嵌套類我有下面的類聲明:語法錯誤而返回一個模板

template <typename Key_T, typename Mapped_T, size_t MaxLevel = 5> 
class SkipList 
{ 

public: 

    class Iterator 
    { 
    typedef std::pair<Key_T, Mapped_T> ValueType; 
    template <typename Key1, typename Obj1, size_t MaxLevel1> friend class SkipList; 
    public: 
     //Iterator functions 

    private: 
     //Iterator Data 
    }; 

    SkipList(); 
    ~SkipList(); 
    SkipList(const SkipList &); 
    SkipList &operator=(const SkipList &); 

    std::pair<Iterator, bool> insert(const ValueType &); 
    template <typename IT_T> 
    void insert(IT_T range_beg, IT_T range_end); 

    void erase(Iterator pos); 


private: 
    //data 
}; 

當我宣佈類定義之外的SkipListinsert功能

template <typename Key_T, typename Mapped_T, size_t MaxLevel> 
typename std::pair<SkipList<Key_T,Mapped_T,MaxLevel>::Iterator, bool> SkipList<Key_T,Mapped_T,MaxLevel>::insert(const ValueType &input) 

以下錯誤出現:

SkipList.cpp:349:69: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _T1, class _T2> struct std::pair’ 
SkipList.cpp:349:69: error: expected a type, got ‘SkipList<Key_T, Mapped_T, MaxLevel>::Iterator’ 
SkipList.cpp:349:72: error: ‘SkipList’ in namespace ‘std’ does not name a type 
SkipList.cpp:349:80: error: expected unqualified-id before ‘<’ token 

我的代碼有什麼問題?

回答

3

您需要typename關鍵字:

typename std::pair<typename SkipList<Key_T,Mapped_T,MaxLevel>::Iterator, bool> SkipList<Key_T,Mapped_T,MaxLevel>::insert(const ValueType &input) 

否則編譯器認爲Iterator是類成員。