我正在为翻译做一个解析树。以下是我树中节点的代码:
struct rtok {
std::string type;
std::string val;
};
struct rnode {
rtok tok;
vector<rnode> child;
} node;
vector<rnode> ptree;
树直到我尝试使用&#34; push_back()&#34; on&#34; node.child&#34;即node.child[0].push_back();
&#34; rtok&#34;我只是用来存储令牌的自定义结构,我只包含它以使示例更完整。
我认为node.child[0].push_back();
无法工作的原因是因为保存解析树的基本向量(ptree
)只有1维。所以我的问题是,有没有办法让C ++根据需要动态地向ptree
向量添加新维度?
- 编辑 -
我省略了向向量添加新节点的功能:
void add_term(rtok tok) {
rnode n;
n.tok = tok;
ptree.back().child.push_back(n);
}
答案 0 :(得分:2)
node.child[0]
之前,它不存在。创建node
后,node.child
将是一个空向量,因此访问第一个(通过[0]
)是未定义的。
要使其正常工作,请为child
提供初始大小或向其添加元素,然后使用它们:
node.child.push_back(rnode());
node.child[0].push_back(...);
答案 1 :(得分:0)
我的坏!我试图将项目插入到向量中,而不引用我的node
结构的子元素。
即。我这样做了:
ptree.back().child[0].push_back(n);
当我应该这样做时:
ptree.back().child[0].child.push_back(n);