形式参数1的类型是不完整的错误

时间:2017-11-07 20:37:42

标签: c++ c struct scope

我正在尝试编写一个打印学生信息的程序 但Code :: Blocks说:

错误:形式参数1的类型不完整。 错误:' displayStudentInformation'的冲突类型 这就是代码。

#include <stdio.h>

void displayStudentInformation(struct student stu);

struct student{
  int id;
  char *firstName;
  char *lastName;
  float gpa;
};

int main()
{
  struct student stu1;
  stu1.id = 101;
  stu1.firstName = "Ali";
  stu1.lastName = "Alavi";
  stu1.gpa = 18;

  displayStudentInformation(stu1);

  return 0;
}

void displayStudentInformation(struct student stu)
{
  printf("Student information :\n");
  printf("ID : %d",stu.id);
  printf("First Name : %s",stu.firstName);
  printf("Last Name :%s",stu.lastName);
  printf("GPA : %.2f",stu.gpa);
  printf("\n");
}

1 个答案:

答案 0 :(得分:0)

在函数原型之前定义结构:

struct student {
  int id;
  char *firstName;
  char *lastName;
  float gpa;
};

void displayStudentInformation(struct student stu);

现在结构已知,可以在函数原型中使用。

请注意,您可以typedef结构,以便每次要声明struct student类型的变量时都不必编写student

typedef struct student {
  int id;
  char *firstName;
  char *lastName;
  float gpa;
} student;

void displayStudentInformation(student stu);

由于某些原因你的问题也被标记为“c ++”(?)我在这里要提到的是,在C ++中,你不需要typedef它。即使没有student,您也可以使用struct student代替typedef

如果您打算使用C ++而不是C,那么我还应该提一下,建议对字符串使用std::string而不是char*。请注意,与C相比,C ++是一种非常不同的语言。如果您当前的目标或任务是学习C,那么不要只使用C ++编译器编译C代码。请使用C编译器。如果您使用C ++编译器,您可以(并且可能会)最终获得有效C ++但无效C的代码。