我正在构建一个霍夫曼编码树,我想创建一个数组,其中每个位置都包含一个单独的树,如下所示:
// Number of initial nodes
int number;
cin >> number;
int* weights = new int[number];
for (int i = 0; i < number; i++)
cin >> weights[i];
// Convert to huffman tree with one element
intHuffTree* tree = new intHuffTree[number];
for (int i = 0; i < number; i++) {
tree[i] = intHuffTree(weights[i]);
}
其中类的定义如下:
// Huffman tree with integers
class intHuffTree {
private:
// Root of the tree
intHuffNode* Root;
public:
// Leaf constructor
intHuffTree (int freq) { Root = new intLeafNode(freq); }
// Internal constructor
intHuffTree (intHuffTree* l, intHuffTree* r) {
Root = new intIntlNode(l->root(), r->root());
}
// Destructor
~intHuffTree() {};
// Get root
intHuffNode* root() { return Root; }
// Root weight
int weight() { return Root->weight(); }
};
编译时,出现如下错误:
main.cpp: In function ‘int main()’:
main.cpp:19:47: error: no matching function for call to ‘intHuffTree::intHuffTree()’
intHuffTree* tree = new intHuffTree[number];
^
我想知道为什么我不能像对int
数组那样初始化数组,有没有可能的解决方法?
非常感谢!
获取您的代码:
new intHuffTree[number];
这是“使用其默认构造函数创建N个intHuffTrees”,其中N为number
。您没有默认的构造函数,这是错误消息试图告诉您的内容。
查看您的代码,也许您打算将number
传递给构造函数?在这种情况下,代码为:
new intHuffTree(number);
请注意,括号中的更改。
此
intHuffTree* tree = new intHuffTree[number];
尝试分配具有number
个元素的数组。为此,将调用一个默认的构造函数(可以在不带参数的情况下调用它),但是您的类没有任何构造函数。
[当您不需要处理手动动态内存时,则不需要。要创建实例,您可以编写
InHuffTree tree(number);
如果要使用number
元素创建数组,则需要提供默认的构造函数。
intHuffTree* tree = new intHuffTree[number];
上面的语句正在创建一个intHuffTree数组。该数组将具有“数字”元素。每个元素的类型为intHuffTree。要创建每个元素,编译器需要代码中缺少的默认构造函数,因为您提供了重载的构造函数。
[如果您打算用'number'元素创建一棵树,则需要将其写为
intHuffTree* tree = new intHuffTree(number);
如果要创建intHuffTree的'number'元素数组,则需要添加不带参数的构造函数。
intHuffTree () { /* Do the right things here. */ }