c++ - 您如何理解错误 : cannot convert from 'int []' to 'int []'

标签 c++ arrays visual-studio-2005 pointers error-code

编译以下代码时:

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/

相关文章:

c++ - 在分析代码时,我应该使用匹配的 (gcc) 编译器优化标志吗?

c++ - 在 Windows 的 C++ 中使用 recvfrom() 时出现 WSAEFAULT 错误

python - for 语句中的动态数组

c - 为什么C中的这个简单程序崩溃(数组VS指针)

php - 如何在 mysql 中检查哪个序列化数组包含我想要查找的值

visual-studio - Visual Studio 2005 报告服务与 SQL Server 2008

用于通过遗留代码实现 Web 服务 API 的 C++ 库?

.net - 调试在 Dev Studio 外部构建的 .NET 程序集

c++ - 制作可以存储子类对象的父类(super class)类型的 vector

javascript - 在javascript中创建 "m x n"二维数组