C ++: потеря данных при вставке дерева B + - PullRequest
0 голосов
/ 09 апреля 2019

Всякий раз, когда я вставляю новый элемент в мое дерево B +, он, по-видимому, перезаписывает каждую точку данных той, которую нужно вставить, еще до того, как функция вставки запускается.Единственная возможная причина, которую я обнаружил, заключается в том, что мой объект bPLus, похоже, не имеет доступа к структуре Professor, которая содержится в каждом узле.Например, если я в отладчике, все значения профессора пусты.Ключи (cle) с другой стороны, работают и доступны.Может быть, это как-то связано с указателями?

Когда я не работал с клавишами, я получал бы «ошибку чтения символов строки», если бы я вызывал определенные функции из main, тогда как другие работали бы.И те же самые функции будут работать, если их вызывать из рабочей функции внутри класса.Я чувствую, что все эти вопросы связаны между собой.

Я включил все, что может быть вовлечено, я в растерянности.

struct Professeur {
    string ID;
    string nom;
    string dept;
    string salaire;
};

struct Noeud {
    Professeur *valeur[3];
    string cle[3];
    Noeud *enfant[4];
    Noeud *parent;
    Noeud *suivant;
    bool isLeaf;

    Noeud(){
        for (int i = 0; i < 3; i++) {
            valeur[i] = NULL;
            enfant[i] = NULL;
            cle[i] = "vide";
        }
        isLeaf = 0;
        parent = NULL;
        suivant = NULL;
        enfant[3] = NULL;
    }
};

class bPlus {
private:
    Noeud* racine;
public:
    bPlus() {
        racine = new Noeud;
        racine->isLeaf = 1;
    }

    void inserer(Professeur x) {
        if (findValue(x.nom)) {
            return;
        }
        if (racine->isLeaf) {
            //do the insertion
        }

        else {
            //find leaf, do insertion
        }
    }
int main() {
    Professeur profs[12];

    //gather data from text file

    for (int i = 0; i < 12; i++) {
        profs[i].ID = ID[i];
        profs[i].nom = nom[i];
        profs[i].dept = dept[i];
        profs[i].salaire = salaire[i];
    }

    bPlus arbre;
    for (int i = 0; i < 3; i++) {
        arbre.inserer(profs[i]);
    }

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...