Неопределенные символы… оператор new (длинный без знака) [дубликаты]

0

Я сделал это в чистом 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)

Это мой код на идеоне. Нажмите здесь, чтобы просмотреть его.

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, пожалуйста, не стесняйтесь комментировать.

  • 2
    Какая у вас строка компиляции?
  • 1
    Если вы используете new (и, надеюсь, delete ), значит, вы не программируете на C, поэтому я удалил этот тег. И это, вероятно, причина того, что ваше соединение перестало работать, потому что вы clang с помощью clang который не связывается с библиотекой времени выполнения C ++, вам следует вместо этого строить с помощью clang++ , который автоматически связывается с библиотекой времени исполнения C ++ (или вручную связывается с библиотекой времени исполнения C ++) ,
Показать ещё 2 комментария
Теги:
algorithm
tree

1 ответ

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, как указано в комментариях к вашему вопросу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню