自定义类的C ++数组,没有匹配的函数调用

问题描述 投票:0回答:2

我正在构建一个霍夫曼编码树,我想创建一个数组,其中每个位置都包含一个单独的树,如下所示:

// 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数组那样初始化数组,有没有可能的解决方法?

非常感谢!

c++ arrays class new-operator huffman-code
2个回答
0
投票

获取您的代码:

new intHuffTree[number];

这是“使用其默认构造函数创建N个intHuffTrees”,其中N为number。您没有默认的构造函数,这是错误消息试图告诉您的内容。

查看您的代码,也许您打算将number传递给构造函数?在这种情况下,代码为:

new intHuffTree(number);

请注意,括号中的更改。


0
投票

intHuffTree* tree = new intHuffTree[number];

尝试分配具有number个元素的数组。为此,将调用一个默认的构造函数(可以在不带参数的情况下调用它),但是您的类没有任何构造函数。

[当您不需要处理手动动态内存时,则不需要。要创建实例,您可以编写

InHuffTree tree(number);

如果要使用number元素创建数组,则需要提供默认的构造函数。


0
投票
intHuffTree* tree = new intHuffTree[number];

上面的语句正在创建一个intHuffTree数组。该数组将具有“数字”元素。每个元素的类型为intHuffTree。要创建每个元素,编译器需要代码中缺少的默认构造函数,因为您提供了重载的构造函数。

[如果您打算用'number'元素创建一棵树,则需要将其写为

intHuffTree* tree = new intHuffTree(number);

如果要创建intHuffTree的'number'元素数组,则需要添加不带参数的构造函数。

intHuffTree () { /* Do the right things here. */ }
© www.soinside.com 2019 - 2024. All rights reserved.