我不知道为什么它不起作用。
template <typename E>
class SearchTree {
public:
class Iterator {
Iterator& operator++();
};
};
template <typename E>
Iterator& SearchTree<E>::Iterator::operator++() {}
警告C4346:“迭代器”从属名称不是类型
错误C2061:语法错误:标识符“迭代器”
答案 0 :(得分:3)
您可以使用尾随返回类型来解决此问题:
template <typename E>
auto SearchTree<E>::Iterator::operator++() -> Iterator& {}
在尾随返回类型中,类型可以在类的范围内。在SearchTree<E>::
名称查找之前,看不到类内部。
答案 1 :(得分:2)
这是关于范围的问题。
使用
template <typename E>
Iterator& SearchTree<E>::Iterator::operator++() {}
当您将符号Iterator
用作返回类型时,该类型在该范围内是未知的。您必须指定其范围:
template <typename E>
typename SearchTree<E>::Iterator& SearchTree<E>::Iterator::operator++() {}
如评论和其他答案中所述,您还可以使用跟踪返回类型。这是可能的,因为这样就知道了范围。
在相关说明上,以及为什么我为返回类型添加typename
关键字,请参见Where and why do I have to put the “template” and “typename” keywords?
答案 2 :(得分:0)
您要完全指定返回值:
template <typename E>
SearchTree<E>::Iterator& SearchTree<E>::Iterator::operator++() {}