Witam :)
Piszę właśnie jako projekt szablon drzewa binarnego z paroma bajerami plus udostępniający dwa iteratory. Ponieważ dotychczas nie pisałem za dużo programów obiektowych z wykorzystaniem szablonów to napotkałem parę problemów natury składniowej. Będę wdzięczny za wszelkie uwagi. Na razie zacznę prawdopodobnie od takiego bzdetu...
Szablon drzewa binarnego z pliku binary_tree.h:
...
#include "btree_iterators.h"
template < typename _Vertex, typename _Edge >
class binary_tree {
public:
friend class btree_iterator<_Vertex, _Edge>;
typedef pair<_Vertex, _Edge> value_type;
// ...jakis kod
protected:
struct node {
pair<_Vertex,_Edge> value;
size_t depth;
node* left;
node* right;
//...
};
typedef std::list<node*> nodes_list;
// ...jakis kod
};
Fragment iteratora z pliku "btree_iterators.h":
template < typename _Vertex, typename _Edge >
class btree_iterator {
public:
friend class binary_tree<_Vertex, _Edge>;
// ...jakis kod
protected:
btree_iterator(bool dfs, typename std::_List_iterator<node*> i, const binary_tree<_Vertex, _Edge>* in_btree);
// ...jakis kod
};
No i w metodach iteratora mam kod odwołujący się do typu node, oraz próbujący operować na jego polach, np.
(*node_ptr).value = ...
Typ node jednak nie jest w ogóle rozpoznawany w klasie iteratora, a jeśli na początku btree_iterators.h dodam deklarację wyprzedzającą:
struct node;
to choć o ten typ kompilator się nie pluje, to jednak nie mogę się odwoływać do jego pól (value, depth,...). Co zrobić?