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. */ }