Szablon drzewa

0

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ć?

0

Solved.

Problem tkwił w kolejności umieszczania poszczególnych elementów w kodzie. W dotychczasowej wersji głównym plikiem szablonu drzewa był plik binary_tree.h zawierający szablon drzewa, lecz jeszcze wcześniej inkludujący btree_iterators.h, tymczasem kolejność powinna być odwrotna. Rozwiązanie: plik nagłówkowy grupujący inne pliki nagłówkowe w odpowiedniej kolejności. Ciekawe czemu wcześniej na to nie wpadłem...

Ponieważ projekt jeszcze nie jest ukończony (i zostało mi na niego raptem parę dni) to proszę o nie zamykanie tematu, bo jak pojawią się jeszcze jakieś problemy to o nich tutaj napiszę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1