首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

超级郁闷的有关问题

2012-03-01 
超级郁闷的问题~tree.h--------------classNode{public:virtual~Node()virtualdoubleCalc()const0virtu

超级郁闷的问题~
tree.h
--------------
class   Node  
{
public:
virtual   ~Node();

virtual   double   Calc()   const=0;
virtual   bool   IsLvaue()   const;
virtual   void   Assign(double);
};

class   NumNode:public   Node             //第一个问题
{
public:
NumNode(double   num);

double   Calc()   const;
private:
const   double   _num;
};
//...
class   BinNode:public   Node
{
public:
BinNode(Node   *p_left,Node   *p_right);
~BinNode();
protected:
const   Node   *_p_left;
const   Node   *_p_right;
};

class   AssignNode   :   public   BinNode
{
public:
AssignNode(Node   *p_left,Node   *p_right);
double   Calc   ()   const;
};

tree.cpp
-------------------
NumNode::NumNode(double   num):_num(num){}

double   NumNode::Calc()   const
{
return   _num;
}
//...

double   AssignNode::Calc()   const         //这里是第2个问题
{
double   x   =   _p_right-> Calc();
_p_left-> Assign(x);
return   x;
}


错误提示:
1.
tree.obj   :   error   LNK2019:   无法解析的外部符号   "public:   virtual   __thiscall   Node::~Node(void) "   (??1Node@@UAE@XZ),该符号在函数   "public:   virtual   void   *   __thiscall   Node::`scalar   deleting   destructor '(unsigned   int) "   (??_GNode@@UAEPAXI@Z)   中被引用

2.
c:\cpp.pjt\vs   2005\caculator\scanner\tree.cpp(112)   :   error   C2662:   'Node::Assign '   :   cannot   convert   'this '   pointer   from   'const   Node '   to   'Node   & '

怎么解决呢?

[解决办法]
因为double AssignNode::Calc() const 有const修饰函数
所以这个函数不能修改成员变量
而_p_left-> Assign(x);这个可能修改了_p_left指针所指向的内容.
要么将Node::Assign()声明为const类型
要么去掉double AssignNode::Calc() const这里的const
[解决办法]
析构函数没有定义
声明为const成员函数却要改变变量值是欺骗编译器的不可取做法
[解决办法]
(1)Node::~Node只有声明没有定义。“无法解析的外部符号”意思就是找不到其定义。
(2)_p_left-> Assign(x);这里的“_p_left”是个const对象,不能在它上面调用非const的Assign成员函数。

热点排行