我写一个函数准备定义一个结构体,为啥在定义函数里边我的结构体数组给我报错说是 表达式必须指向完整对象类型的指针,这个是为什么(就是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
关于问题的回答:
错误原因:在函数参数中使用了结构体数组作为参数,由于结构体数组属于不完整类型,因此会出现"表达式必须指向完整对象类型的指针"的错误。
解决方法:将函数参数中的结构体数组改为指向结构体的指针,并在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;
}