class StockNode
{
friend class StockTree;
private:
Stock myStock;
StockNode *left;
StockNode *right;
public:
StockNode();
StockNode(Stock s,StockNode* l,StockNode *r):myStock(s),left(l),right(r){}
StockNode (const StockNode &);
Stock getStock() {return myStock;}
StockNode *getLeft() {return left;}
StockNode *getRight() {return right;}
};
StockNode::StockNode(const StockNode &node)
{
myStock=node.getStock();
left=node.getLeft();
right=node.getRight();
}
上述的代码是导致错误的例子。错误主要的原因是const类型的对象(node)调用非const类型的方法(getStock(),getLeft(),getRight())导致的。
由于const对象在调用成员函数时,会将this指针强制转换成const this指针,它调用成员函数时会去找对应的const get函数,而编译器无法将非const类型的get函数转换成const类型的get函数,因此出现编译错误。
方法是将get函数转为const类型的函数。
Stock getStock() const {return myStock;}
StockNode *getLeft() const {return left;}
StockNode *getRight() const {return right;}
这样就没问题了。