gpt4 book ai didi

C++ - 结构需要访问类的私有(private)实例变量

转载 作者:行者123 更新时间:2023-11-30 05:23:35 24 4
gpt4 key购买 nike

我的 C++ 有点生疏,所以我想知道你是否可以帮助我。基本上,我有两个结构和一个类,这些结构需要访问该类的私有(private)实例变量。

#ifndef TREE_H
#define TREE_H

#include <iostream>

struct Node {
...
inline void addEdge(Edge* e);
};

inline void Node::addEdge(Edge* e) {
char ch = inp[e->startIndex];
edges[ch] = e;
}

struct Edge {
Node* next = new Node();
int startIndex = 0;
friend std::ostream& operator<<(std::ostream& out, Edge e) {
int index = inp.size() - e.startIndex + endIndex + 1; // Here the edge needs access to the private members of the Tree class such as string inp, and int endIndex
// ... do things with index
return out;
}
};


class Tree {
public:
Tree();
friend std::ostream& operator<<(std::ostream& out, Tree s);

private:
Node* root = nullptr;
int endIndex = 0;
std::string inp;
void foo();
std::ostream& printTree(std::ostream& out, Node* curr, std::string append="");

};
#endif // TREE_H

显然上面的代码是行不通的。我在想我会在类里面移动结构。但是随后 Edge 的 << 运算符给我一个“无效使用非静态数据成员‘endIndex’”的错误。我确信可行的一个想法是在创建 Edge 时将引用/指针作为 Edge 的成员传递给 endIndex,但我想知道有什么更好的方法来解决这个问题。

最佳答案

我建议使用访问者模式。

这里有一个简短的、不完整的例子,给你一个想法:

class Tree
{
Node _Node;
std::list<Node> _Children;
public:
... // other stuff, like AddChild(), etc.

void Traverse(Visitor visitor)
{
visitor.HandleNodeData(_Node.Data);
traverseChildren(visitor);
}
};

我也会考虑将 Tree 类实现为模板。

关于C++ - 结构需要访问类的私有(private)实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39074785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com