我如何返回迭代器形式函数:
我很喜欢这个: 。 ..template<class S,class T> class Database {
public:
.
..
map<S,Node<T>*> m_map::iterator Find (S keyToFind);
.
..
....
private:
.
..
map<S,Node<T>*> m_map;
..
.
};
.
..
template<class S,class T>
map<S,Node<T>*> m_map::iterator Find (S keyToFind) {
map<S,Node<T>*>::iterator itMap;
itMap = m_map.find(KeyToUpDate);
return itMap;
}
..
.
有很多错误,因为: 错误1错误C2653:'m_map':不是类或命名空间名称 错误2错误C2146:语法错误:缺少';'在标识符“查找”之前 错误3错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持默认 - 错误5错误C2653:'m_map':不是类或命名空间名称 错误7错误C2133:'iterator':未知大小 .. ...
我不明白是什么问题..
答案 0 :(得分:6)
看起来你想要:
typename map<S,Node<T>*>::iterator
你应该真的使用typedef来清理这些东西:
template<class S, class T>
class Database
{
public:
// I hope you have't put `using namespace std;` in a header...
typedef std::map<S, Node<T>*> map_type;
typedef typename map_type::iterator iterator;
// etc...
// use references to avoid copying
iterator Find (const S& keyToFind);
private:
map_type m_map;
};
答案 1 :(得分:3)
您的Find
函数应定义为:
template<class S,class T>
typename map<S,Node<T>*>::iterator Find (S keyToFind) {
map<S,Node<T>*>::iterator itMap;
itMap = m_map.find(KeyToUpDate);
return itMap;
}
没有作为函数返回类型一部分的“m_map”。
编辑:实际上,没有必要创建临时itMap
迭代器;您可以直接返回find
的结果。另外,我认为KeyToUpDate
应该是keyToFind
。进行这些修改后,您最终会得到:
template<class S,class T>
typename map<S,Node<T>*>::iterator Find (S keyToFind) {
return m_map.find(keyToFind);
}
答案 2 :(得分:2)
这应该是:
template<class S,class T>
typename map<S,Node<T>*>::iterator Find(S keyToFind) {
typename map<S,Node<T>*>::iterator itMap;
itMap = m_map.find(KeyToUpDate);
return itMap;
}
和
typename map<S,Node<T>*>::iterator Find (S keyToFind);
typename
是必需的,因为iterator
是从属类型,请参阅例如here