8
Tôi đang gặp sự cố với khai báo phương thức cho mẫu lớp lồng nhau. Tôi có một cái gì đó như thế này:C++ Nested Template Class Method Issue
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
}
Sau đây dường như làm việc mà không có một vấn đề:
template <typename T>
template <typename Y>
HashTrie<T>::Entry<Y> HashTrie<T>::Entry<Y>::someMethod() {
//...
}
Tuy nhiên, đây không:
template <typename T>
template <typename U>
std::map<char, HashTrie<T>::Node<U> > HashTrie<T>::Node<U>::anotherMethod() {
// ...
}
tôi nhận được lỗi sau trên GCC
./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
Tôi đã cố gắng thêm một typename, nhưng điều đó dường như không giúp
template <typename T>
template <typename U>
std::map<char, typename HashTrie<T>::Node<U> > HashTrie<T>::Node<U>::anotherMethod() {
// ...
}
kết quả trong ...
./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 nói:
./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() {
Tôi không thực sự chắc chắn phải làm gì ở đây và gặp khó khăn trong việc tìm ra bất kỳ vấn đề tương tự nào trên web. Bất kỳ trợ giúp sẽ được đánh giá cao.
Cảm ơn bạn rất nhiều! – Dan