npis2001
April 26th, 2004, 01:32 PM
VC++ 6.0 complier complaining of ambiguous symbol and calls when i overload this function:
ostream& operator<<(ostream &os, BTreeNode& rBTN)
Source file:
#include <iostream.h>
#include <iomanip.h>
#include "BSTree.h"
using namespace std;
BTreeNode::BTreeNode(int v)
{
value=v;
left=0;
right=0;
}
int BTreeNode::getValue()
{
return value;
}
BTreeNode* BTreeNode::getLeft()
{
return left;
}
BTreeNode* BTreeNode::getRight()
{
return right;
}
BTreeNode** BTreeNode::getLeftAddr()
{
return &left;
}
BTreeNode** BTreeNode::getRightAddr()
{
return &right;
}
// complains about this overloading function!
ostream& operator<<(ostream &os, BTreeNode& rBTN)
{
os << setfill(0)<<"node: "<< setw(6) << &rBTN
<<"value: "<< setw(5) << rBTN.getValue()
<<"left: "<< setw(6) << rBTN.getLeft()
<<"right: "<< setw(6) << rBTN.getRight();
return os;
}
BTree::BTree()
{
root=0;
}
void BTree::insert(int val)
{
insert(val, &root);
}
void BTree::insert(int val, BTreeNode **bT)
{
if(*bT==0)
{
*bT=new BTreeNode(val);
if(bT==0)
{
cout<<"something majorly wrong here";
}
}
else if(val<(*bT)->getValue())
{
insert(val, (*bT)->getLeftAddr());
}
else if(val>(*bT)->getValue())
{
insert(val, (*bT)->getRightAddr());
}
}
int BTree::find(int val)
{
return find(val, root);
}
int BTree::find(int val, BTreeNode *bT)
{
int rtrn=FALSE;
if(bT==0)
{}
else if(val<(bT)->getValue( ))
{
rtrn=find(val, (bT)->getLeft( ));
}
else if(val>(bT)->getValue( ))
{
rtrn=find(val, (bT)->getRight( ));
}
else
{
rtrn=TRUE;
}
return rtrn;
}
void BTree::preOrder()
{
preOrder(root);
}
void BTree::preOrder(BTreeNode *bT)
{
if(bT!=0)
{
cout<<bT->getValue();
preOrder(bT->getLeft( ));
preOrder(bT->getRight( ));
}
else
cout<<"bT is equal to 0";
}
void BTree::inOrder()
{
inOrder(root);
}
void BTree::inOrder(BTreeNode *bT)
{
if(bT!=0)
{
inOrder(bT->getLeft( ));
cout<<bT->getValue()<<"\n";
inOrder(bT->getRight( ));
}
}
void BTree::postOrder()
{
postOrder(root);
}
void BTree::postOrder(BTreeNode *bT)
{
if(bT!=0)
{
postOrder(bT->getLeft( ));
postOrder(bT->getRight( ));
cout<<bT->getValue();
}
else
cout<<"bT is equal to 0";
}
header file:
#include <iomanip>
#ifndef BSTree_H
#define BSTree_H
//declare BTreeNode as a class
const FALSE = 0;
const TRUE = 1;
class BTreeNode
{
//public data
public:
BTreeNode(int);
int getValue();
BTreeNode* getLeft();
BTreeNode* getRight();
BTreeNode** getLeftAddr();
BTreeNode** getRightAddr();
//private data
private:
int value;
BTreeNode* left;
BTreeNode* right;
};
class BTree
{
public:
BTree();
void insert(int);
int find(int);
void preOrder();
void inOrder();
void postOrder();
//BTreeNode *root;
private:
BTreeNode *root;
void insert(int, BTreeNode**);
int find(int, BTreeNode*);
void preOrder(BTreeNode*);
void inOrder(BTreeNode*);
void postOrder(BTreeNode*);
};
#endif
ostream& operator<<(ostream &os, BTreeNode& rBTN)
Source file:
#include <iostream.h>
#include <iomanip.h>
#include "BSTree.h"
using namespace std;
BTreeNode::BTreeNode(int v)
{
value=v;
left=0;
right=0;
}
int BTreeNode::getValue()
{
return value;
}
BTreeNode* BTreeNode::getLeft()
{
return left;
}
BTreeNode* BTreeNode::getRight()
{
return right;
}
BTreeNode** BTreeNode::getLeftAddr()
{
return &left;
}
BTreeNode** BTreeNode::getRightAddr()
{
return &right;
}
// complains about this overloading function!
ostream& operator<<(ostream &os, BTreeNode& rBTN)
{
os << setfill(0)<<"node: "<< setw(6) << &rBTN
<<"value: "<< setw(5) << rBTN.getValue()
<<"left: "<< setw(6) << rBTN.getLeft()
<<"right: "<< setw(6) << rBTN.getRight();
return os;
}
BTree::BTree()
{
root=0;
}
void BTree::insert(int val)
{
insert(val, &root);
}
void BTree::insert(int val, BTreeNode **bT)
{
if(*bT==0)
{
*bT=new BTreeNode(val);
if(bT==0)
{
cout<<"something majorly wrong here";
}
}
else if(val<(*bT)->getValue())
{
insert(val, (*bT)->getLeftAddr());
}
else if(val>(*bT)->getValue())
{
insert(val, (*bT)->getRightAddr());
}
}
int BTree::find(int val)
{
return find(val, root);
}
int BTree::find(int val, BTreeNode *bT)
{
int rtrn=FALSE;
if(bT==0)
{}
else if(val<(bT)->getValue( ))
{
rtrn=find(val, (bT)->getLeft( ));
}
else if(val>(bT)->getValue( ))
{
rtrn=find(val, (bT)->getRight( ));
}
else
{
rtrn=TRUE;
}
return rtrn;
}
void BTree::preOrder()
{
preOrder(root);
}
void BTree::preOrder(BTreeNode *bT)
{
if(bT!=0)
{
cout<<bT->getValue();
preOrder(bT->getLeft( ));
preOrder(bT->getRight( ));
}
else
cout<<"bT is equal to 0";
}
void BTree::inOrder()
{
inOrder(root);
}
void BTree::inOrder(BTreeNode *bT)
{
if(bT!=0)
{
inOrder(bT->getLeft( ));
cout<<bT->getValue()<<"\n";
inOrder(bT->getRight( ));
}
}
void BTree::postOrder()
{
postOrder(root);
}
void BTree::postOrder(BTreeNode *bT)
{
if(bT!=0)
{
postOrder(bT->getLeft( ));
postOrder(bT->getRight( ));
cout<<bT->getValue();
}
else
cout<<"bT is equal to 0";
}
header file:
#include <iomanip>
#ifndef BSTree_H
#define BSTree_H
//declare BTreeNode as a class
const FALSE = 0;
const TRUE = 1;
class BTreeNode
{
//public data
public:
BTreeNode(int);
int getValue();
BTreeNode* getLeft();
BTreeNode* getRight();
BTreeNode** getLeftAddr();
BTreeNode** getRightAddr();
//private data
private:
int value;
BTreeNode* left;
BTreeNode* right;
};
class BTree
{
public:
BTree();
void insert(int);
int find(int);
void preOrder();
void inOrder();
void postOrder();
//BTreeNode *root;
private:
BTreeNode *root;
void insert(int, BTreeNode**);
int find(int, BTreeNode*);
void preOrder(BTreeNode*);
void inOrder(BTreeNode*);
void postOrder(BTreeNode*);
};
#endif