我写一个函数准备定义一个结构体,为啥在定义函数里边我的结构体数组给我报错说是表达式必须指向完整对象类型的指针,这个是为什么

我写一个函数准备定义一个结构体,为啥在定义函数里边我的结构体数组给我报错说是 表达式必须指向完整对象类型的指针,这个是为什么(就是for循环里边的两个tarr报错)

#include <iostream>
#include <string>
using namespace std;
struct student
{
    string sname;
    int score;
};
struct teacher
{
    string tname;
    int id;
    struct student arr[5];
};
string nameSeed = "ABCDE";
void Teacher1(struct teahcer tarr[], int len)
{
    for (int i = 0; i < 4; i++)
    {
        tarr[i].tname = "teacher_";
        tarr[i].tname += nameSeed[i];
    }
}
int main()
{
    struct teacher tarr[3];
    int len = sizeof(tarr) / sizeof(tarr[0]);
    return 0;
}

函数Teacher1的第一个参数,teacher单词打错了,你打成了teahcer

  • 以下回答由chatgpt基于相关博客总结生成:

    关于问题的回答:

    错误原因:在函数参数中使用了结构体数组作为参数,由于结构体数组属于不完整类型,因此会出现"表达式必须指向完整对象类型的指针"的错误。

    解决方法:将函数参数中的结构体数组改为指向结构体的指针,并在for循环中使用指针变量。

    示例代码:

    #include <stdio.h>
    
    struct Person {
        char name[20];
        int age;
    };
    
    void func(struct Person* pArr, int len) {
        int i;
        for (i = 0; i < len; i++) {
            printf("%s %d\n", pArr[i].name, pArr[i].age);
        }
    }
    
    int main() {
        // 定义结构体数组
        struct Person arr[] = {
            {"Tom", 18},
            {"Jack", 20},
            {"Mary", 22}
        };
        // 数组长度
        int len = sizeof(arr) / sizeof(arr[0]);
        // 使用结构体数组作为函数参数会报错
        // func(arr, len);
        // 将结构体数组改为指向结构体的指针
        struct Person* pArr = arr;
        func(pArr, len);
        return 0;
    }