template <class T>
struct BinaryTreeNode
{
T data_;
BinaryTreeNode* left_;
BinaryTreeNode* right_;
};template <class Node>
class TreeItBase : public boost::iterator_facade<
TreeItBase<Node>,
Node,
boost::forward_traversal_tag
>
{
public:
TreeItBase()
: nodePtr_(0L) {}
explicit TreeItBase(Node* node)
: nodePtr_(node) {}
protected:
friend class boost::iterator_core_access;
template <class OtherNode>
bool equal(const TreeItBase<OtherNode>& other) const
{ return nodePtr_ == other.nodePtr_; }
virtual void increment() = 0;
Node& dereference() const
{ return *nodePtr_; }
Node* nodePtr_;
std::stack<Node*> stack_;
};template <class Node>
class PreOrderIt : public TreeItBase<Node>
{
private:
void increment()
{ this->nodePtr_ = this->nodePtr_->right_; } // Ignore the logic error
};
Я получаю,
error: invalid operands to binary expression ('BinaryTree<int>::PreIt'
(aka 'PreOrderIt<BinaryTreeNode<int> >') and 'PreIt'
(aka 'PreOrderIt<BinaryTreeNode<int> >'))
Здесь полная ошибка (pastebin).
Вот мой BinaryTree
учебный класс,
template <class T>
class BinaryTree
{
public:
typedef TreeItBase< BinaryTreeNode<T> > It;
typedef PreOrderIt< BinaryTreeNode<T> > PreIt;
void Insert(const T& data);
void Erase(It& it);
PreIt PreOrderBegin();
PreIt PreOrderEnd();
};
А вот мой main()
,
int main()
{
BinaryTree<int> tree;
for (BinaryTree<int>::PreIt it = tree.PreOrderBegin();
it != tree.PreOrderEnd(); ++it)
{
std::cout << *it << ", ";
}
std::cout << "\n";
return 0;
}
Изменено virtual void increment() = 0
чтобы,
virtual void increment()
{}
Спасибо всем за помощь, 🙂
Задача ещё не решена.
Других решений пока нет …