I've been trying to code my own binary tree (without looking at any examples), but for some reason my code just refuses to compile! here is my source:

Code:
#include <iostream.h>

struct node
	{
	node *right;
	node *left;
	int key;
	};
typedef node* NodePtr;

void add_node(NodePtr &tree, int value, int switch);
	
main()
	{
	int num, num_of_nodes;
	NodePtr root, pointer; int called = 0;

	cout << "How many numbers do you whish to add to the tree?";
	cin >> num_of_nodes;
	cout << "Enter the first node:";
	cin >> num;
	root->key = num;
	pointer = root;
	for (int i = 0; i < num_of_nodes; i++)
		{
		cout << "Enter a number to add:";
		cin >> num;
		add_node(pointer, num, called);
		pointer = root;
		called = 0;
		} 
	
	return 0;
	}
void add_node(NodePtr &tree, int value, int switch)
	{
	if (switch == 0)
		{
		node* tmp = new node;   
		tmp->key = value;  
		switch = 1;  
		}
	if (value >= tree->key)    
	    if (tree->right != NULL)
		{
		tree = tree->right;
		add_node(tree, value);
		}
	    else
		tree->right = tmp;

	if (value <= tree->key)    
	    if (tree->left != NULL)
		{
		tree = tree->left;
		add_node(tree, value);
		}
	    else
		tree->left = tmp;
			
	}
It all seems to check out fine, yet I get the following errors from g++:
Code:
binary_tree.cpp:11: parse error before `switch'
binary_tree.cpp:35: parse error before `switch'
binary_tree.cpp: In function `void add_node(...)':
binary_tree.cpp:37: parse error before `switch'
binary_tree.cpp:40: `tmp' undeclared (first use this function)
binary_tree.cpp:40: (Each undeclared identifier is reported only once for each
   function it appears in.)
binary_tree.cpp:40: `value' undeclared (first use this function)
binary_tree.cpp:41: parse error before `=' token
binary_tree.cpp: At global scope:
binary_tree.cpp:47: `tree' was not declared in this scope
binary_tree.cpp:47: ISO C++ forbids declaration of `add_node' with no type
binary_tree.cpp:47: `int add_node' redeclared as different kind of symbol
binary_tree.cpp:36: previous declaration of `void add_node(...)'
binary_tree.cpp:47: initializer list being treated as compound expression
binary_tree.cpp:48: parse error before `}' token
binary_tree.cpp:56: `tree' was not declared in this scope
binary_tree.cpp:56: ISO C++ forbids declaration of `add_node' with no type
binary_tree.cpp:56: redefinition of `int add_node'
binary_tree.cpp:47: `int add_node' previously defined here
binary_tree.cpp:56: initializer list being treated as compound expression
binary_tree.cpp:57: parse error before `}' token
WHY!?