未定义的符号... operator new(unsigned long)

时间:2014-11-17 07:50:43

标签: c++ algorithm tree

我是用纯C做的,但现在我试图在C ++中实现二进制搜索树。大多数代码完全相同,但我想使用malloc()运算符代替new。但是,我收到了这个错误:

Undefined symbols for architecture x86_64:
  "operator new(unsigned long)", referenced from:
      GetNewNode(int) in BstTreeV3-beb469.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是我在ideone上的代码。 Click here to view it.

Node* GetNewNode(int data) {
    Node *newNode = new Node();
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;
}

void Insert(Node **root, int data) 
{
    if (*root == NULL) { // empty tree
        *root = GetNewNode(data);
    }
    else if ((*root)->data < data) {
        Insert(&((*root)->left), data);
    }
    else {
        Insert(&((*root)->right), data);
    }
}

我知道这可能不是最好的实施方法,但我只是练习。如果您对如何实施BST有任何建议,请随时发表评论。

1 个答案:

答案 0 :(得分:1)

为使程序有意义,它应该是这样的:

class Node
{
   private:
     int   data;
     Node* left;
     Node* right;

   public:

     Node()
       :data(0), left(NULL), right(NULL)
     {}

     Node(int d)
       :data(d), left(NULL), right(NULL)
     {}
};


...

*root = new Node(data);

如果您不使用这些语言功能,您可以坚持使用C.

尽管您的特定错误似乎很可能来自使用C编译器编译C ++代码,正如您对问题的评论中所指出的那样。