错误:函数调用中从int到int(*)[4]的转换无效

Error: invalid conversion from int to int(*)[4] in function calls

本文关键字:int 无效 转换 函数调用 错误      更新时间:2023-10-16

我正在做一个家庭作业项目,在这个项目中,我必须通过基于数组的树进行修改的预序遍历,我需要将数组传递给函数才能使用它,但我在函数中不断收到一个错误,说它是从intint(*)[4]的无效转换,我似乎不明白为什么。

这是我的代码副本:

    #include <iostream>
    #include <fstream>
    char code[10];
    void preOrder(int tree[][4], int index, int treeDepth)
    {
            int tempIndex;
            if(tree[index][2] == -1 && tree[index][3] == -1)
            {
                    std::cout << char(tree[index][1]) << ": ";
                    for(int i = 0; i < treeDepth; i++)
                            std::cout << code[i];
                    std::cout << "n"
            }
            else
            {
                    for(int i = 0; i < 2; i++)
                    {
                            code[treeDepth] = 0;
                            tempIndex = tree[index][2];
                            preOrder(tree[index][2], tempIndex, treeDepth + 1);
                            code[treeDepth] = 1;
                            tempIndex = tree[index][2];
                            preOrder(tree[index][3], tempIndex, treeDepth + 1);
                    }
             }
             return;
    }
    int main()
    {
            int numNodes = 0, i = 0, j = 0;
            int root = 0, treeDepth = 0;
            int numcols = 4;
            std::fstream inFile;
            inFile.open("tree.dat");
            inFile >> root;
            inFile >> numNodes;
            int huffmanTree[numNodes][numCols];
            for(i = 0; i < numNodes; i++)
                    for(j = 0; j < numCols; j++)
                            inFile >> huffmanTree[i][j];
            preOrder(huffmanTree, root, treeDepth);
            inFile.close();
            return 0;
    }

如有任何帮助,我们将不胜感激。而且我不能使用指针,我也可以将huffmanTree声明为全局,但也不知道如何实现这一点。也为它放置的一切方式感到抱歉。这是我第一次发帖。

错误为:

ola.cpp: In function ‘void preOrder(int (*)[4], int, int)’:
ola.cpp:28:53: error: invalid conversion from ‘int’ to ‘int (*)[4]’ [-fpermissive]
ola.cpp:10:6: error:   initializing argument 1 of ‘void preOrder(int (*)[4], int, int)’ [-fpermissive]
ola.cpp:31:53: error: invalid conversion from ‘int’ to ‘int (*)[4]’ [-fpermissive]
ola.cpp:10:6: error:   initializing argument 1 of ‘void preOrder(int (*)[4], int, int)’ [-fpermissive]
ola.cpp: In function ‘int main()’:
ola.cpp:67:39: error: cannot convert ‘int (*)[(((sizetype)(((ssizetype)numCols) + -1)) + 1)]’ to ‘int (*)[4]’ for argument ‘1’ to ‘void preOrder(int (*)[4], int, int)’

关于第67行的错误:在标准C++中,这是不允许的:

int huffmanTree[numNodes][numCols];

只有常量表达式可以用作数组维度。

一些编译器实现了一个非标准的扩展来允许这种数组,但不是很好:对于编译器来说,这个扩展似乎并没有扩展到将数组传递给一个需要固定宽度数组的函数。

使用const int numcols = 4;可能会解决您的问题。


线路28和31上的错误是由于调用preOrder(tree[index][2]造成的。第一个参数是int,但函数需要指向数组的指针。如果您试图从某个特定的行和列开始创建数组的切片,那么这实际上是不可能的。相反,您必须通过tree, index, 2, tempIndex, treeDepth + 1,在函数中再添加2个参数来指示起点;并相应地修改功能逻辑。