错误:函数调用中从int到int(*)[4]的转换无效
Error: invalid conversion from int to int(*)[4] in function calls
我正在做一个家庭作业项目,在这个项目中,我必须通过基于数组的树进行修改的预序遍历,我需要将数组传递给函数才能使用它,但我在函数中不断收到一个错误,说它是从int
到int(*)[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个参数来指示起点;并相应地修改功能逻辑。
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 从 'int' 到 'int*' CPP 的转换无效
- 无效 f(int) 的模板和 decltype
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- 错误:数组下标的类型"int[int]"无效
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 从类指针到 int 的转换无效
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- 为什么 std::d eclval<int>() = std::d eclval<int>() 无效?
- 错误:数组下标的类型"const bool[int]"无效
- 2D数组中数组下标的类型"int[int]"无效
- 错误:数组下标的类型'int[int]'无效
- C++中的合并排序:无法在合并函数中传递数组 - 转换为'int*'无效
- 数组下标的类型"int[int]"无效
- 使用矢量的数组下标'int[int]'无效类型
- C++中的二进制补码 - 数组下标的类型"int[int]"无效
- 从“char*”到“char”[-fpermissive]的转换无效,数组下标的类型“char[int]”无效
- 无法解决错误:间接寻址需要指针操作数("int"无效)
- C++将数组相互分配;type int*=type int有效,但int=int*无效