【发布时间】:2020-09-11 13:59:48
【问题描述】:
我有两个班级,我称它们为“foo”和“bar”。 “foo”有两个公共成员:(一个字符串作为它的名字和一个“bar”类型的向量)。
class bar {
//not important
};
class foo {
public:
std::string fooName;
std::vector<bar> bars;
}
如果我有一个 bar 元素,我如何访问和打印其对应的 fooName?我正在考虑这些方面的事情,但我不知道如何填写空白:
std::cout << bars[index].__________.fooName;
当我尝试用谷歌搜索答案时,我只能找到有人询问有关访问其他类的私有成员的问题。
【问题讨论】:
-
您确定不想要
foos 的std::vector,其成员变量类型为bar? -
没有简单的方法可以做到这一点。除了将
bars 直接存储在向量中,您还需要存储struct,而不是bar包含指向foo的指针。然后,您需要仔细更新这些指针,以确保它们在foo被移动或复制时保持有效。这很容易出错,因此如果可能,请考虑更改设计。 -
@IgorTandetnik 我正在尝试重新创建棋盘游戏。
foo是一个大陆,bar是大陆内的一个城市。董事会有多个大陆(foo),每个大陆都有多个城市(bar)。我希望能够打印大陆的名称,只要给出它所拥有的城市。 -
您需要给每个
bar一个指向拥有它的foo的指针。或者只是将大陆名称复制到每个城市。语言中没有内置神奇的反向指针;如果您需要一个,请在您的班级中添加一个。 -
@sharkie 帖子的标题与问题的内容不太匹配。您甚至没有封闭类的成员,而只有作为封闭类成员的向量的一个元素。这将潜在答案从“有时可能但丑陋且不可移植”更改为“如果不进行设计更改就不可能”。
标签: c++ class oop inheritance member