Я пытаюсь написать метод 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"
.