2011-08-25 21 views
8

मुझे नेस्टेड क्लास टेम्पलेट के लिए विधि घोषणा के साथ कोई समस्या है।सी ++ नेस्टेड टेम्पलेट क्लास विधि समस्या

template <typename T> 
class HashTrie 
{ 
    template <typename Y> 
    class Entry 
    { // members and methods here 
    }; 

    template <typename U> 
    class Node 
    { // members and methods here 
    }; 

    // members and methods here 
} 

निम्नलिखित एक समस्या के बिना काम करने लगता है:: मैं इस तरह कुछ है

template <typename T> 
template <typename Y> 
HashTrie<T>::Entry<Y> HashTrie<T>::Entry<Y>::someMethod() { 
    //... 
} 

बहरहाल, यह नहीं करता है:

template <typename T> 
template <typename U> 
std::map<char, HashTrie<T>::Node<U> > HashTrie<T>::Node<U>::anotherMethod() { 
// ... 
} 

मैं जीसीसी पर निम्न त्रुटि प्राप्त

./HashTrie.h:389: error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’ 
./HashTrie.h:389: error: expected a type, got ‘(HashTrie::Node < <expression error>)’ 
./HashTrie.h:389: error: template argument 4 is invalid 
./HashTrie.h:389: error: expected unqualified-id before ‘>’ token 

मैं एक typename जोड़ने की कोशिश की, लेकिन वह मदद करने के लिए

template <typename T> 
template <typename U> 
std::map<char, typename HashTrie<T>::Node<U> > HashTrie<T>::Node<U>::anotherMethod() { 
// ... 
} 

परिणामों में ...

./HashTrie.h:389: error: template argument 2 is invalid 
./HashTrie.h:389: error: template argument 4 is invalid 
./HashTrie.h:389: error: expected unqualified-id before ‘>’ token 

icpc प्रतीत नहीं होता है का कहना है:

./HashTrie.h(389): error: template parameter "HashTrie<T>::Node [with T=T]" may not have a template argument list 
    std::map<char, typename HashTrie<T>::Node<U> > HashTrie<T>::Node<U>::newNodeMap() { 

मैं सच में यकीन नहीं है यहां क्या करना है, और वेब पर किसी भी तरह की समस्याएं खोजने में कठिनाई हुई है। किसी भी सहायता की सराहना की जाएगी।

उत्तर

7

इस कहते हैं:

template <typename T> 
template <typename U> 
std::map<char, typename HashTrie<T>::template Node<U> > HashTrie<T>::Node<U>::foo() 
{ 
} 
+0

बहुत बहुत शुक्रिया! – Dan

संबंधित मुद्दे