【发布时间】:2014-11-17 07:50:42
【问题描述】:
我是在纯 C 中完成的,但现在我正在尝试在 C++ 中实现二叉搜索树。大多数代码完全相同,但我想使用new 运算符而不是malloc()。但是,我收到此错误:
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 有任何建议,请随时发表评论。
【问题讨论】:
-
你的编译行是什么?
-
如果你使用的是
new(我希望还有delete),那么你不是在编写C语言,所以我删除了那个标签。这可能是您的链接失败的原因,因为您使用clang构建,它不与 C++ 运行时库链接,您应该使用clang++构建,它会自动链接到 C++ 运行时库(或手动链接到C++ 运行时库)。 -
啊,是的,Sublime 仍在使用我制作的 C 构建系统,而不是根据源文件类型自动使用 C++。我想知道为什么它不自动切换构建系统。我应该删除我原来的问题吗?
-
一些编译器根据扩展名 .c 或 .cpp 决定是编译为 C 还是 C++。有些没有。但是除了编译器错误之外,您的代码中也存在基本设计问题,您需要将其转换为 OO 设计,如我的回答所示。