Garmaine Staff asked 1 year ago
Person& findPerson(Person* root, string child_name){
    if(root == nullptr) throw exception();
    else if(root->name.compare(child_name) == 0) return *root;
    else{
        if(root->father == nullptr)return findPerson(root->mother, child_name);
        else if(root->mother == nullptr)return findPerson(root->father, child_name);
        else {
            return findPerson(root->mother, child_name);
            return findPerson(root->father, child_name);
        }

    }
}

family::Person::Person(string person_name){
    name = person_name;
    father = nullptr;
    mother = nullptr;

};

family::Person::Person(string person_name, bool is_male){
    name = person_name;
    father = nullptr;
    mother = nullptr;
    isMale = is_male;

};



// TREE
family::Tree::Tree(string name){
    root = new Person(name);
};

family::Tree& Tree::addFather(string child, string father){
    Person& child_found = findPerson(root, child);
    Person* f = new Person(father, true);
    child_found.father = f;

    return *this;
    };


family::Tree& family::Tree::addMother(string child, string mother){
    Person& child_found = findPerson(root, child);
    Person* f = new Person(mother, false);
    child_found.mother = f;
    return *this;
    };
int main(){
    Tree t("X");

    t.addFather("X","Y");
    t.addMother("X", "Z");
    t.addFather("Z", "W");
    t.addFather("Y","F");
    return 0;
}

I trying to implement binary tree with persons. Any person got father and mother. In my main() function it works good until I add person to my first "X"s father. My main gets Aborted (core dumped) error on the 4th addFather("Y","F") call, and I cant realize what is my fault.