我有以下课程:
class Node
{
private:
char* m_key;
Node* left;
Node* right;
public:
Node() : m_key(nullptr), left(nullptr), right(nullptr) {}
Node(const char* key)
{
this->m_key = new char[strlen(key) + 1];
strcpy_s(this->m_key, strlen(key) + 1, key);
left = nullptr;
right = nullptr;
}
friend class BinSTree;
};
class BinSTree
{
private:
Node* root;
public:
BinSTree() : root(nullptr) {}
friend std::fstream& operator>>(std::fstream& in, Node* p);
Node* deleteNode(Node* p, const char* key);
~BinSTree();
};
我想重载operator>>
,所以当我执行以下代码时:
Node test("Key");
BinSTree bst;
bst>>test;
节点test
从头开始被删除。问题是我无法从Node
访问私有成员,也无法访问类BinSTree
的成员。 BinSTree
是一个包含二叉树根的类。Node
是一个代表节点的类。
答案 0 :(得分:1)
您无权访问BinSTree
的成员,因为首先您的operator>>
根本不对BinSTree
进行操作-它对std::fstream&
和{{ 1}}。
您的代码提供的功能是从Node*
中“提取” Node*
的功能-它与std::fstream
毫无关系。
您想要的操作员的正确签名是
BinSTree
或
void operator>>(BinSTree& tree, Node* p)
(后者将允许您链接节点提取)。