`

数组的列表初始化方式:C和C++的不同处理

阅读更多

今天在编译WinDump时,把一个c文件改为cpp,其中以前的一个定义和初始化是:

static struct protoidlist {
	u_char protoid[5];
	const char *name;
}  protoidlist[] = {
	{{ 0x00, 0x00, 0x0c, 0x01, 0x07 }, "CiscoMLS" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x00 }, "CiscoCDP" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x01 }, "CiscoCGMP" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x03 }, "CiscoVTP" },
	{{ 0x00, 0xe0, 0x2b, 0x00, 0xbb }, "ExtremeEDP" },
	{{ 0x00, 0x00, 0x00, 0x00, 0x00 },NULL }
};

 用VC6编译通过。

 

改为cpp文件后,编译失败,错误提示是:

  error C2552: 'protoidlist' : non-aggregates cannot be initialized with initializer list

 

经过测试,发现改成

static struct protoidlist {
	u_char protoid[5];
	const char *name;
}  protoidlist[] = {
	{{ 0x00, 0x00, 0x0c, 0x01, 0x07 }, "CiscoMLS" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x00 }, "CiscoCDP" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x01 }, "CiscoCGMP" },
	{{ 0x00, 0x00, 0x0c, 0x20, 0x03 }, "CiscoVTP" },
	{{ 0x00, 0xe0, 0x2b, 0x00, 0xbb }, "ExtremeEDP" },
	{{ 0x00, 0x00, 0x00, 0x00, 0x00 },NULL }
};

编译就没有问题。
 
分享到:
评论

相关推荐

    matlab数组的初始化

    和C/C++类似,MATLAB也遵循数组初始化值的数量不能超过数组元素个数的规定。如果初始化值不足,未被赋值的元素将默认为0(对于数值数组)或者空字符串(对于字符串数组)。 了解这些基础知识,你可以灵活地在...

    数组的初始化.docx

    在编程语言中,数组是一种非常基础且重要的数据结构,用于存储同一类型的数据集合。本文将详细探讨数组的初始化,特别是针对C++语言的初始...理解并熟练掌握数组初始化的不同方式和规则,是编写可靠、高效代码的基础。

    C语言不定长数组及初始化方法

    C语言不定长数组及初始化方法 C语言中不支持不定长数组,需要使用malloc或在动态指定数组的长度来实现动态数组。...C语言不定长数组及初始化方法需要注意数组的长度和初始化的元素个数,以避免编译错误和运行时错误。

    数组的定义,初始化和使用,C语言数组详解.pdf

    在C语言中,数组是一种非常...总的来说,数组是C语言中必不可少的一部分,理解和掌握其定义、初始化、使用以及与指针的关系,对于编写高效且可靠的C语言程序至关重要。通过实际的编程练习,你可以更好地掌握这些概念。

    c语言二维数组初始化 (3).zip

    本篇将深入探讨C语言中的二维数组初始化,包括基本概念、初始化方式以及相关的编程技巧。 1. 基本概念 二维数组由一个行数和列数确定,表示为`类型 名称[行数][列数]`。例如,一个3行4列的整型数组可以声明为`int ...

    C++数组的学习笔记(入门).docx

    本文将对C++数组的定义、初始化和引用进行详细的介绍。 一维数组 一维数组的定义格式为:type arrayName [ arraySize ];其中,type是数组元素的数据类型,arrayName是数组的名称,arraySize是数组的大小,必须是一...

    C++中静态初始化数组与动态初始化数组详解

    本文将对C++中的两种数组初始化方式——静态初始化与动态初始化进行详解,帮助读者更好地理解和应用这两种技术。 ### 静态初始化数组 静态初始化,顾名思义,就是在编译时期便已确定数组的大小和内容。在C++中,...

    C++第6章-数组.ppt

    C++数组 C++中,数组是一种重要的数据结构,用于存储一个或多...在C++中,数组是一种重要的数据结构,用于存储和处理数据。数组的定义和初始化是数组使用的基本步骤,需要注意数组的名称、类型、大小和初始化等方面。

    JNA调用C++动态库,传入二维数组,通过C++返回二维数组,java调用C++完整案例

    在Java编程中,有时我们需要与C++...总之,JNA提供了灵活的方式让Java与C++库进行交互,但在处理复杂数据类型如二维数组时需要注意内存布局和数据转换。在实际项目中,应确保充分测试,保证在不同平台上都能正确运行。

    C C++ C++ Builder创建动态数组

    // 初始化数组元素 } ``` ### 3. 动态数组的内存管理 动态数组的内存需要手动管理。当你不再需要这个数组时,应该使用`delete[]`运算符来释放内存,防止内存泄漏。例如: ```cpp delete[] arr; ``` 在C++ ...

    C++对象数组[归类].pdf

    Triangle和Rectangle数组通过初始化列表被赋予了初始值,而Line45和PtArray则没有明确的初始化。程序中通过循环遍历并调用Print方法展示了数组中各个对象的状态。 5. 应用场景: 对象数组在软件开发中广泛应用,...

    C++ 数组 多维数组 -- 二维数组

    在 C++ 中,我们可以使用多种方式来初始化数组。例如,我们可以使用 `auto` 关键字来定义自动数组,例如 `auto int a[8], a1;`。我们也可以使用静态初始化,例如 `static char s[8];`。此外,我们还可以使用动态初始...

    C++第6章数组.ppt

    "C++第6章数组" 在C++语言中,数组是一种非常重要的数据结构。数组是一种集合,集合中每个元素的...正确地定义和初始化数组是非常重要的,否则可能会导致程序的错误。同时,理解多维数组和字符数组的概念也非常重要。

    《C++数组》习题.pdf

    1. **字符数组初始化**: - 在C++中,字符数组可以被初始化为字符串,例如选项A `char a[] = "Hello";` 是正确的,因为字符串字面量隐式添加了结束符`\0`。 - 选项B是错误的,因为多维字符数组需要指定每一维的...

    c++语言程序设计期末考试题库.docx

    知识点:数组,数组初始化 答案:错误 18.判断题18:字符串的存储 知识点:字符串,数组 答案:正确 19.判断题19:字符数组中的元素 知识点:字符数组,数组元素 答案:正确 20.判断题20:字符串的结尾 知识点:...

    C++Primer第五版 第3章 字符串变量和数组(练习解答)

    5. **数组声明和初始化**:理解不同类型的数组声明方式,如`int arr[5]`和`int (*arr)[5]`的区别,以及如何初始化数组。 6. **数组遍历**:学习`for`循环和其他迭代方法遍历数组的所有元素。 7. **动态数组和`std::...

    C++的数组转换成矩阵

    - 这一步骤实现了对矩阵 `a` 和 `b` 的初始化。 3. **矩阵相乘计算**: - 通过三层嵌套循环来实现矩阵相乘的过程: - 外层循环遍历结果矩阵 `c` 的行。 - 中间层循环遍历矩阵 `a` 的列和矩阵 `b` 的行。 - 内...

    计算机软件-商业源码-09 初始化数组和记录.zip

    在不同的编程语言中,数组初始化有不同的语法和方法。例如,在C/C++中,可以这样初始化一维整型数组: ```c int arr[5] = {1, 2, 3, 4, 5}; ``` 这里,数组`arr`包含5个元素,每个元素在初始化时被赋予一个特定的...

    FFMPEG C++封装库使用示例之初始化

    总之,FFmpeg C++ 封装库的初始化是使用 FFmpeg 进行音频和视频处理的第一步。了解如何打印支持的格式不仅有助于调试和验证配置,也为后续的编码、解码、过滤和流媒体操作奠定了基础。通过深入学习和实践这个示例,...

Global site tag (gtag.js) - Google Analytics