Функция Ostream в. cpp не может получить доступ к закрытой структуре в файле .h - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь написать метод inorder traversal, который выводит двоичное дерево поиска в ostream. Я объявляю operator<< как friend в .h файле и определяю Node как private struct. Когда я попытался передать Node в качестве параметра моему вспомогательному методу в .cpp, он сказал, что моя структура Node недоступна.

Мой .h файл выглядит как

#include "Comparable.h"
#include <iostream>
using namespace std;

class SearchTree {
private:
    struct Node {
        Comparable* item;  //pointer to the Comparable data
        int frequency;
        Node* left;        //left child
        Node* right;       //right child
    };

    Node* root;
    void outputHelper(ostream&, const Node*);

public:
    SearchTree();
    SearchTree(const SearchTree&);
    ~SearchTree();

    friend ostream& operator<<(ostream&, const SearchTree&);
};

Моя .cpp реализация выглядит как

#include <iostream>
#include "SearchTree.h"
using namespace std;

void outputHelper(ostream& output, const SearchTree::Node* input) {
    if (input == nullptr) {
        return;
    }
    outputHelper(output, input->left);

    output << *input->item << " " << input->frequency << endl;

    outputHelper(output, input->right);
}

ostream& operator<<(ostream& output, const SearchTree& input) {
    outputHelper(output, input.root);
    return output;
}

Компилятор сказал, что "class SearchTree::Node* is inaccessible".

...