Reputation: 1245
I have template class with a nested template class like this
#include <utility>
template<typename K> class Tree23 {
public:
template<typename Key> class Node {
private:
friend class Tree23<K>;
// snip . . .
};
Node<K> root;
public:
// snip ...
std::pair<bool, Node<K> *> Search(K key);
};
I get several compile errors on the signature of the Search method implementation
template<typename K>
std::pair<bool, Tree23<K>::Node<K> *> Tree23<K>::Search(K key)
{
// make sure tree has at least one element
if (root == 0) {
return std::make_pair(false, 0);
} else {
return Locate(key, root);
}
}
The errors correspond to the line
template<typename K> std::pair<bool, Tree23<K>::Node<K> *> Tree23<K>::Search(K key)
The complie errors are:
Node.h:64:55: error: type/value mismatch at argument 2 in template parameter list for 'template<class _T1, class _T2> struct std::pair'
Node.h:64:55: error: expected a type, got '(Tree23<K>::Node < <expression error>)'
Node.h:64:58: error: expected unqualified-id before '>' token
Node.h:64:58: error: expected initializer before '>' token
I'm unclear how to fix this. Any feedback would be appreciated.
Upvotes: 1
Views: 149
Reputation: 1941
Try this:
template<typename K>
std::pair<bool, typename Tree23<K>::template Node<K> *> Tree23<K>::Search(K key)
// ^^^^^^^^ ^^^^^^^^
{
// make sure tree has at least one element
if (root == 0) {
return std::make_pair(false, 0);
} else {
return Locate(key, root);
}
}
Also check this out as to why this is necessary.
Upvotes: 2