关于c ++:创建树节点时vtable的未定义引用

undefined reference for vtable when creating tree nodes

本问题已经有最佳答案,请猛点这里访问。

我是一个跟踪数据结构类的学生,在上一个作业中遇到了一些麻烦。目的是使用我们教授提供的一些预定义的节点类来创建二进制表达式树。我们提供的文件如下。

表达式节点.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class ExpressionNode
{
protected:
    string parent;
    ExpressionNode *left;   // The left operand.
  ExpressionNode *right;  // The right operand.

public:
    // Returns the number value of this node.    
    virtual int getValue() = 0;  

    //returns parent node
    string getParent() {return parent;};

    //returns left child
    ExpressionNode* getLeft() { return left; }

    //returns right child
    ExpressionNode* getRight() { return right; }
};


//A subclass of ExpressionNode that represents a math node that holds a number value  
class ConstantNode : public ExpressionNode
{    
public:
    // Constructor.  Create a node to hold number.
    ConstantNode(string theNumber)
    {
        ExpressionNode::parent = theNumber;
        ExpressionNode::left = NULL;
        ExpressionNode::right = NULL;
    }


    //Returns the number value in the node
    int getValue();        

};

那么,我遇到问题的代码来自我自己的函数build()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void myExpressionTree::build()
{
   post = this->postfixInput(); //creates the postfix input string to be read by function
   cout << post << endl;

   for (int i =0; i < post.size(); i ++)
   {
     if (post[i] >= '0' && post[i] <='9' )
     {
     string num1;
     num1 += post[i];
     ConstantNode *num = new ConstantNode(num1);
     theNodes.push(num);
     }

     else if (post[i] == '*' || post[i] == '+' || post[i] == '-' || post[i] =='/')
     {
     do stuff...
     }

  }
}

当我试图编译时,我得到了undefined reference to 'vtable for ConstantNode'

如果有人能指出我做错了什么,那将是一个很大的帮助。


看起来ConstantNode::GetValue已声明但未定义。只需定义函数体,它就可以很好地链接…