C++调用getData报错:无法将Record[10]转换为Record类型问题求助
错误原因
你的getData函数第一个形参声明为单个Record类型,但调用时传入的实参是Record类型的数组,C++不存在数组到单个结构体对象的隐式转换,因此触发类型不匹配的编译错误。
修复方案
因为你的需求是传入数组填充数据,需要将函数第一个形参修改为可接收数组的类型,C++中数组传参会自动退化为指针,两种声明方式均可:
- 数组形式声明
// 函数原型修改为以下任意一种即可 void getData(Record listofRecords[], int & listSize); void getData(Record listofRecords[MAX_RECORDS], int & listSize);
- 指针形式声明
void getData(Record *listofRecords, int & listSize);
修改函数原型后,后续编写getData的函数实现时,首参数类型要和原型保持一致,即可在函数内通过下标listofRecords[i]直接操作数组元素,填充完成后给引用参数listSize赋值,就能把有效元素个数返回给main函数。
修复后完整可编译代码示例
#include <iostream> #include <iomanip> #include <fstream> #include <string> using namespace std; //全局常量 const int MAX_RECORDS = 10; //存储记录的结构体 struct Record { string itemId; string itemName; int quantity; double price; }; //修改后的函数原型 void getData(Record listofRecords[], int & listSize); int main() { Record listOfRecords[MAX_RECORDS]; int listSize; getData(listOfRecords,listSize); return 0; } // getData函数实现示例(可按需修改填充逻辑) void getData(Record listofRecords[], int & listSize) { // 此处可写读取数据填充数组的逻辑,比如读文件、接收用户输入等 // 示例:填充2条测试数据 listSize = 2; listofRecords[0] = {"001", "测试商品1", 10, 9.9}; listofRecords[1] = {"002", "测试商品2", 5, 19.9}; }
内容的提问来源于stack exchange,提问作者artist23
相关产品推荐
相关产品推荐

