编译以下代码时:
void DoSomething(int Numbers[])
{
int SomeArray[] = Numbers;
}
VS2005 编译器报错 C2440: 'initializing' : cannot convert from 'int []' to 'int []'
我知道它实际上是在尝试将指针转换为一个无法工作的数组。但是,您如何向学习 C++ 的人解释该错误?
最佳答案
说有类型和不完全类型:
struct A;
是一个名为 A 的结构的不完整类型。虽然
struct A { };
是一个名为 A 的结构的完整类型。第一个的大小尚不清楚,而第二个的大小已知。
有不完整的类类型,如上面的结构。但也有不完整的数组类型:
typedef int A[];
那是一个名为 A 的不完整数组类型。它的大小尚不清楚。您不能从中创建数组,因为编译器不知道数组有多大。但是您可以使用它来创建一个数组,仅如果您立即初始化它:
A SomeArray = { 1, 2, 3 };
现在,编译器知道数组是一个包含 3 个元素的 int 数组。如果你试图用指针初始化数组,编译器不会比以前更聪明,并拒绝,因为那不会给它要创建的数组的大小。
关于c++ - 您如何理解错误 : cannot convert from 'int []' to 'int []' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/535713/