problem with templates tree

Jun 1, 2015 at 4:03pm
Write your question here.
Hello
I wrote this code, the function need to return pointer to node of a binary tree:

1
2
3
4
5
6
7
8
9
10
11
template <class T> 
Tree<T>::Node<T>* SearchTree<T>::searchHelp(T val)
{
	if(Tree<T>::root->value ==val)
		return Tree<T>::root;
	else
	{
		return (Tree<T>::root->right).searchHelp();
		return (Tree<T>::root->left).searchHelp();
	}
}


and I have 3 problems:
1:error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

2:error C2936: 'Tree<T>::Node<T>' : template-class-id redefined as a global data variable


3:error C2143: syntax error : missing ';' before '*'

Hope to have an answer fast
Thank You
Jun 1, 2015 at 5:36pm
please please please help us!!!!
and if you dont kkow just write us that.....
Jun 1, 2015 at 6:24pm
Are you sure all those errors are in that code, not in another part of the program?
Jun 1, 2015 at 9:04pm
yes!
those errors are at line 2
Jun 1, 2015 at 9:12pm
show us the decleration of Tree and Node as well as one of the usages of them please.

Also note that only the first return statement will be invoked!
you will only return 1, not 2 Tree<T>::Node<T>
1
2
return (Tree<T>::root->right).searchHelp();
return (Tree<T>::root->left).searchHelp();


why do you access the elements like this?
Tree<T>::root
is root a static member?

shouldn't it look like this?
this->root
Last edited on Jun 1, 2015 at 9:14pm
Jun 1, 2015 at 9:34pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//-----------------------------------
//  class Tree (Binary Trees)
// process nodes in Pre/In/Post  order
//-----------------------------------
template <class T> class Tree
{
protected:
	//--------------------------------------------------------
	//  inner class Node
	//      a single Node from a binary tree
	//--------------------------------------------------------
	template <class T> class Node
	{
	public:
		Node * left;
		Node * right;
		T value;
		Node(T val)
			: value(val), left(NULL), right(NULL){}
		Node(T val, Node<T> * l, Node<T> * r)
			: value(val), left(l), right(r){}
	};		//end of Node class

	Node<T>* root;   

public:
	Tree() {root=NULL;}	 // initialize tree
	~Tree();
	int isEmpty() const;
	void clear() { clear(root); root=NULL;}
	void preOrder() { preOrder(root); }
	void inOrder() { inOrder(root); }
	void postOrder() { postOrder(root); }
	int leaves();
	int height();
	void reflect();
	int onlyLeftSon ();

	virtual void process(T val) {cout<<val<<" ";}
	virtual void add (T val)=0;
	virtual bool search (T val) =0;
	virtual void remove (T val) =0;


private:	
	void  clear(Node<T> * current);
	void  preOrder(Node<T> * current);
	void  inOrder(Node<T> * current);
	void  postOrder(Node<T> * current);
};
#endif
Jun 1, 2015 at 9:35pm
I wrote 2 times return because it's a recursive function
Jun 1, 2015 at 9:45pm
I wrote 2 times return because it's a recursive function

The function ends at the first return statement


You have pure virtual functions here so you should not be able to instanciate a Tree at all...
1
2
3
	virtual void add (T val)=0;
	virtual bool search (T val) =0;
	virtual void remove (T val) =0;
Jun 1, 2015 at 10:04pm
okay.
Thank You!!
Topic archived. No new replies allowed.