我是用纯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有任何建议,请随时发表评论。
答案 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 ++代码,正如您对问题的评论中所指出的那样。