Binary Search Tree Search problem

I am writing code for a binary search tree search and when I compile it i am getting strange errors such as, " /tmp/ccJ4X8Xu.o: In function `btree::btree()':
project1.cpp:(.text+0x0): multiple definition of `btree::btree()' "

What does that mean exactly?

tree.h
#ifndef TREE_H
#define TREE_H

struct node
{
  int key_value;
  node *left;
  node *right;
};

class btree
{
    public:
        btree();
        void p_insert(int key);
        node *p_search(int key);
    private:
        void insert(int key, node *leaf);
        node *search(int key, node *leaf);
        node *root;
};

#endif

Tree.cpp
#include "tree.h"
#include <iostream>

btree::btree()
{
        root = NULL;
}

void btree::p_insert(int key)
{
        if(root!=NULL)
                insert(key, root);
        else
        {
                root = new node;
                root->key_value = key;
                root->left = NULL;
                root->right = NULL;
  }
}

node *btree::p_search(int key)
{
        return search(key, root);
}
void btree::insert(int key, node *leaf)
{
        if(key < leaf->key_value)
        {
                if(leaf->left != NULL)
                        insert(key, leaf->left);
                else
                {
                        leaf->left = new node;
                        leaf->left->key_value = key;
                        leaf->left->left = NULL;    
                        leaf->left->right = NULL;   
                }
        }
        else if(key >= leaf->key_value)
        {
                if(leaf->right != NULL)
                        insert(key, leaf->right);
                else
                {
                        leaf->right = new node;
                        leaf->right->key_value = key;
                        leaf->right->left = NULL; 
                        leaf->right->right = NULL;
                }
        }
}

node *btree::search(int key, node *leaf)
{
        if(leaf!=NULL)
        {
                if(key==leaf->key_value)
                        return leaf;
                if(key<leaf->key_value)
                        return search(key, leaf->left);
                else
                        return search(key, leaf->right);
        }
        else return NULL;
}


main.cpp
#include <iostream>
#include "tree.cpp"

using namespace std;


int main(int argv, char** argc)
{
        bool is_there;
        btree tree;
        int num_array[12] = {22,9,35,3,14,28,46,8,12,21,23,40};

        for(int i=0; i < 12; i++)
                tree.p_insert(num_array);

        for (int j=0; j < 12; j++)
        {
                is_there = tree.p_search(23);
                if(is_there == 1)
                        cout << "You found 23!!" <<endl;
                is_there = tree.p_search(25);
                if(is_there == 0)
                        cout << "25 is not there" <<endl;
        }
}

---------- Post updated at 11:24 PM ---------- Previous update was at 11:12 PM ----------

where the tongue faces are they are supposed to be a : and a "p" (due to lack of code tags)

It means what it says, you've defined a member multiple times. You should define it once, in its own .cpp file, and just have headers declaring it everywhere else.

By including tree.cpp instead of tree.h, you've short-circuited this, re-declaring the member contents over and over every time you include it. Include tree.h instead.