我对 C++ 很陌生,正在寻找有关以下问题的一些建议。我正在尝试创建一个生成树形(是的,真正的树)的程序。这些形状完全由树枝构成。为此,我开始编写一个名为 Branch 的类。我的想法是在 main.cpp 中创建一个 Branch 类的实例,它本身将创建 Branch 的实例。这继续进行NUMBER_OF_LEVELS
迭代。
目前,该程序的结构如下:
主.cpp:
#include "branch.h"
int main()
{
Branch tree;
return 0;
}
分支.h:
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <cmath>
using namespace std;
const double NUMBER_OF_LEVELS=4;
static int nodecounter=0;
struct Branch
{
public:
int level;
int nodenumber;
vector<Branch> children;
Branch *parent;
Branch(int lvl,Branch p);
Branch();
static vector<Branch> getAllBranches();
};
分支.cpp:
#include "Branch.h"
static vector<Branch> allBranches;
Branch::Branch(int lvl,Branch p)
{
level=lvl;
parent=&p;
nodenumber=nodecounter;
nodecounter++;
allBranches.push_back(*this);
if (lvl>1)
{
children.push_back(Branch(level-1,*this));
}
}
//root
Branch::Branch()
{
level=NUMBER_OF_LEVELS;
nodenumber=nodecounter;
nodecounter++;
allBranches.push_back(*this);
children.push_back(Branch(level-1,*this));
}
vector<Branch> Branch::getAllBranches()
{
return allBranches;
}
Branch
现在,这个程序可以工作了,但我想通过将每个对象存储在vector
,中来跟踪所有对象allBranches
。在程序结束时,allBranches
确实是 size NUMBER_OF_LEVELS
,因为它应该是(为简单起见,每个对象只有 1 个孩子)。但是,当我尝试从 main.cpp 中提取子级或父级时,程序崩溃并显示为错误:terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
我想知道这是否是由于static
关键字使用错误引起的?在 C++ 中创建父/子结构的正确方法是什么?