【发布时间】:2020-12-15 14:22:35
【问题描述】:
创建了一个通用树,尝试将它与一个包含一个 int 值和一个 int 数组的自定义类一起使用。
在尝试以几种不同的方式初始化数组后,似乎都没有进入主函数。 节点类的构造函数:
class ArrNode
{
int id;
int* arr;
int length;
public:
ArrNode(int a, int b)
{
id = a;
length = b;
arr = new int[length]();
}
~ArrNode()
{
if(arr != nullptr)
delete arr;
}
int getArrVal(int i) const
{
return this->arr[i];
}
};
模板类:
template <class T>
class AvlTree
{
private:
T val;
AvlTree *left;
AvlTree *right;
int height;
public:
AvlTree(ArrNode t) : val(t) {}
T getVal()
{
return this->val;
}
主要功能:
ArrNode t(5,3) //random numbers
AvlTree<ArrNode> a(t);
假设这两个类都有可用的 get 函数,我已经尝试过:
- 使用初始化列表
- 将构建的节点发送到树中(粘贴在这里的那个)
- 发送 int 值并在树构造函数中构建节点
所有这些都在函数范围内工作,但是在返回主函数后,数组没有按预期初始化为零。
注意 - 尽量不要使用任何标准容器
【问题讨论】:
-
ArrNode有一个指针作为成员,而不是一个数组。使用std::array或std::vector -
嘿,忘了添加我不允许使用任何标准容器,将编辑问题
-
请在问题中包含您的代码的minimal reproducible example。你发的
ArrNode漏掉了一些重要的东西(见3/5规则),这是否只是因为你在这里省略了还不清楚 -
好吧,我想让它更容易阅读,所以我尽量省略,创建了一个可重现的例子
-
if(arr != nullptr)在析构函数中是不需要的,但你应该调用delete[]。
标签: c++ templates constructor