Ошибка “undefined reference to `TreeNode::tree'” [дубликат]

159
09 апреля 2019, 23:10

На данный вопрос уже ответили:

  • статическая переменная в классе 2 ответа
  • Ссылка на неразрешенный внешний символ (возможные причины) 2 ответа

Пишу бинарное дерево поиска. Но плюсы уже смутно помню. При попытке вызова функции выдает:

undefined reference to `TreeNode::tree'

Собственно сам код программы:

#include <iostream>
#include <ctime>
#include <string>
using namespace std;
class TreeNode {
    public: int key; //ключ узла дерева
    public: TreeNode *left, *right; //левый, правый и родительский подузлы
    public: string val; //значение элемента
    public: TreeNode* ins();
    static TreeNode* tree;
    public: TreeNode* search(int k, TreeNode *&node = tree) { //поиск элемента
        if ((node == NULL) || (k == node->key))
            return node;
        if (k < node->key)
            return search(k, node->left);
        else
            return search(k, node->right);
    }
    public: TreeNode* ins(int k, string val, TreeNode *&node = tree) { //вставка элемента
        if (node == NULL) {
            node->key = k;
            node->val = val;
            return node;
        } else if (k < node->key)
            node->left = ins(k, val, node->left);
        else if (k > node->key)
            node->right = ins(k, val, node->right);
        return NULL;
    }
    public: TreeNode* del(int k, TreeNode *&node = tree) { //удаление элемента
        if (node == NULL)
            return node;
        if (k < node->key) {
            node->left = del(k, node->left);
        } else if (k > node->key) {
            node->right = del(k, node->right);
        } else if ((node->left != NULL) && (node->right != NULL)) {
            node->key = begin(node->right)->key;
            node->right = del(node->key, node->right);
        } else {
            if (node->left != NULL)
                node = node->left;
            else
                node = node->right;
        }
        return node;
    }
    public: TreeNode* begin(TreeNode *&node = tree) { //наименьший элемент
        if (node->left == NULL)
            return node;
        return begin(node->right);
    }
    public: TreeNode* end(TreeNode *&node = tree) { //наибольший элемент
        if (node->right == NULL)
            return node;
        return end(node->right);
    }
    public: void traversal(TreeNode *&node = tree) { //обход дерева L->R->t
        if (node != NULL) {
            traversal(node->left);
            traversal(node->right);
            cout << node->key << "\t";
        }
    }
    public: int count(TreeNode *&node = tree) { //количество узлов в дереве
        if ((node->left == NULL) && (node->right == NULL))
            return 1;
        int left, right;
        if (node->left != NULL)
            left = count(node->left);
        else
            left = 0;
        if (node->right != NULL)
            right = count(node->right);
        else
            right = 0;
        return right + left + 1;
    }
    public: void clear() { //очистка дерева
        delete tree;
        tree = NULL;
    }
    public: bool empty() { //проверка на пустоту
        if (tree == NULL)
            return true;
        else
            return false;
    }   
};
int main() {
    TreeNode* treeNodes = NULL;
    for (int i = 0; i < 100; i++)
        treeNodes->ins(1, "sdfsd");
}

Я, скорее всего, где-то неправильно использую ссылки или ещё что-то в том же духе. Как победить ошибку?

READ ALSO
Непонятный цикл

Непонятный цикл

Недавно увидел на ревью такой цикл:

147
Проблема с websocket Tomcat 9. Требуется помощь

Проблема с websocket Tomcat 9. Требуется помощь

Я пытаюсь написать свой первое клиент-серверное приложение, используя websocket и Tomcat 9 серверЭтот пример я нашел в интернете

156
Обрезать не помещающийся текст в &ldquo;com.lowagie.text.pdf.PdfPCell&rdquo;

Обрезать не помещающийся текст в “com.lowagie.text.pdf.PdfPCell”

Делал проставление печати в pdf-файле и столкнулся с проблемой, что если добавить в ячейку текст, который явно не помещается в своей строке,...

191