我对C ++很陌生,并在寻找以下问题的建议。我正在尝试创建一个生成树形状的程序(是的,真正的树)。这些形状完全由分支构建。为此,我开始编写一个名为Branch的类。我的想法是在main.cpp中创建一个类Branch的实例,它本身将创建Branch的实例。这继续NUMBER_OF_LEVELS
次迭代。
目前,该计划的结构如下:
main.cpp中:
#include "branch.h"
int main()
{
Branch tree;
return 0;
}
Branch.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();
};
Branch.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
个对象。在程序结束时,NUMBER_OF_LEVELS
确实大小为terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
,因为它应该是(为简单起见,每个对象只有1个子项)。但是,当我尝试从main.cpp中提取子级或父级时,程序会因错误而崩溃:static
我想知道这是否是由{{1}}关键字的错误使用造成的?在C ++中创建父/子结构的正确方法是什么?
答案 0 :(得分:0)
你有很多问题,我发现的前几个问题:
这足够showstoppers
小事:
该列表并不是全面的
答案 1 :(得分:0)
我的想法是在main.cpp中我创建了一个类Branch的实例, 它本身将创建Branch的实例。