You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:48:04