C++自定义数组class,没有匹配函数调用
C++ array of a self-defined class, no matching function call
我正在构建一个霍夫曼编码树,我想创建一个数组,其中每个位置包含一个单独的树,代码如下:
// 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]);
}
其中 class 的定义如下:
// 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];
这里说的是 "create N intHuffTrees using its default constructor",其中 N 是 number
。您没有默认构造函数,这是错误消息试图告诉您的内容。
查看您的代码,也许您打算将 number
传递给构造函数?在这种情况下,代码将是:
new intHuffTree(number);
注意括号中的变化。
这个
intHuffTree* tree = new intHuffTree[number];
尝试分配一个包含 number
个元素的数组。为此,将调用默认构造函数(可以不带参数调用的构造函数),但是您的 class 具有 none.
当你不需要手动处理动态内存时,那就不要。要创建实例,您可以编写
InHuffTree tree(number);
如果要创建包含 number
个元素的数组,您需要提供默认构造函数。
intHuffTree* tree = new intHuffTree[number];
以上语句创建了一个intHuffTree数组。该数组将包含 'number' 个元素。每个元素都是 intHuffTree 类型。要创建每个元素,编译器需要您的代码中缺少的默认构造函数,因为您提供了重载的构造函数。
如果您打算创建一个包含 'number' 个元素的树,您需要将其写为
intHuffTree* tree = new intHuffTree(number);
如果您打算创建一个包含 'number' 个 intHuffTree 元素的数组,您需要添加不带参数的构造函数。
intHuffTree () { /* Do the right things here. */ }
我正在构建一个霍夫曼编码树,我想创建一个数组,其中每个位置包含一个单独的树,代码如下:
// 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]);
}
其中 class 的定义如下:
// 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];
这里说的是 "create N intHuffTrees using its default constructor",其中 N 是 number
。您没有默认构造函数,这是错误消息试图告诉您的内容。
查看您的代码,也许您打算将 number
传递给构造函数?在这种情况下,代码将是:
new intHuffTree(number);
注意括号中的变化。
这个
intHuffTree* tree = new intHuffTree[number];
尝试分配一个包含 number
个元素的数组。为此,将调用默认构造函数(可以不带参数调用的构造函数),但是您的 class 具有 none.
当你不需要手动处理动态内存时,那就不要。要创建实例,您可以编写
InHuffTree tree(number);
如果要创建包含 number
个元素的数组,您需要提供默认构造函数。
intHuffTree* tree = new intHuffTree[number];
以上语句创建了一个intHuffTree数组。该数组将包含 'number' 个元素。每个元素都是 intHuffTree 类型。要创建每个元素,编译器需要您的代码中缺少的默认构造函数,因为您提供了重载的构造函数。
如果您打算创建一个包含 'number' 个元素的树,您需要将其写为
intHuffTree* tree = new intHuffTree(number);
如果您打算创建一个包含 'number' 个 intHuffTree 元素的数组,您需要添加不带参数的构造函数。
intHuffTree () { /* Do the right things here. */ }