Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’

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;}

这样就没问题了。

你可能感兴趣的:(Error C2662, cannot convert ‘this’ pointer from ‘const class ’ to ‘class &’)