c语言报错不允许使用不完整类型,让用户自定义数组大小。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言报错不允许使用不完整类型,让用户自定义数组大小。相关的知识,希望对你有一定的参考价值。

void Input()

struct student *num1;
int num;
printf("请输入学生的总人数:\n");
scanf("%d,&num");
num1 = (struct student*)calloc(num,sizeof(struct student));//其中struct下显示不允许使用不完整类型。
printf("");后边没写完

struct student

int num;/*学号*/
char name[20]; /*姓名*/
char sex; /*性别(M/W)*/
int NO; /*名次*/
float score1; /*第一门课程成绩*/
float score2; /*第二门课程成绩*/
float sum; /*成绩总和*/
;这是结构体变量的定义

num1 = (struct student*)calloc(num,sizeof(struct student));不是这么写,应该是这样 :


num1 = (student*)calloc(num,sizeof(student));

追问

你用的是什么,编译没报错?还是这么显示有错误啊,我用的是visual studio 2010。谢谢了。

追答// 刚才没仔细看,编译了一下,才发现不少问题,试试这个。
#include "stdio.h"
#include "malloc.h"

struct student

  int num;/*学号*/
  char name[20]; /*姓名*/
  char sex; /*性别(M/W)*/
  int NO; /*名次*/
  float score1; /*第一门课程成绩*/
  float score2; /*第二门课程成绩*/
  float sum; /*成绩总和*/
;

void Input()

  student *num1;
  int num;
  printf("请输入学生的总人数:\\n");
  scanf("%d", &num);
  //scanf("%d,&num");
  num1 = (student*)calloc(num,sizeof(student));//其中struct下显示不允许使用不完整类型。

参考技术A void Input()

struct student *num1;
int num; printf("请输入学生的总人数:\n");
num1 = (struct student*)calloc(num,sizeof(struct student));//其中struct下显示不允许使用不完整类
scanf("%d\n",&num);
printf("");
参考技术B 问题源自你的struct student定义,把目前的全部代码贴出来

你的struct student要在函数定义之前。问题不难,要么截图,或者hi我。
参考技术C 定义struct student

C ++“不允许使用不完整的类型”,试图在类内部创建函数数组

我正在尝试在类内部创建本质上是一个函数数组。

所以这是一个简单的示例,它将位于.h文件中。

class myClass {
private:
  typedef float (*thisMayNotBeNamedRightButFrackIt) (int& a, int& b, float& c);

  float myFunction1 (int& a, int& b, float& c)
  {
    // Do stuff here...
  }

  float myFunction2 (int& a, int& b, float& c)
  {
    // Do some other stuff here...
  }

  thisMayNotBeNamedRightButFrackIt functions[] =
    {
        myFunction1,
        myFunction2
    };
};

因此,“ functions []”处出现“不允许使用不完整类型”。

我该如何解决?


编辑

我从这段代码中得到了这个想法,尽管它不在类之内,但仍可以很好地编译;

#include <iostream>
using namespace std;

typedef int (*IntFunctionWithOneParameter) (int a);

int function(int a){ return a; }
int functionTimesTwo(int a){ return a*2; }
int functionDivideByTwo(int a){ return a/2; }

void main()
{
    IntFunctionWithOneParameter functions[] = 
    {
        function, 
        functionTimesTwo, 
        functionDivideByTwo
    };

    for(int i = 0; i < 3; ++i)
    {
        cout << functions[i](8) << endl;
    }
}
答案

您发布的代码有很多问题:

  • 类定义后没有分号。
  • [Class而不是class
  • 没有为functions成员设置固定大小,这是不允许的。您需要显式设置数组的大小。
  • 成员函数指针与“常规”函数指针不同。成员函数指针具有隐式this作为第一个参数,因为它们需要调用一个对象。因此,myFunction的类型不是myArrayOfFunctions。如果将myFunctionmyFunction2设为静态,则可以将它们存储为常规函数指针。这是一个选择吗?
  • 名称myArrayOfFunctions非常令人困惑,因为它根本不是数组。

除最后一个以外的所有内容都将导致您的代码无法编译。

以上是关于c语言报错不允许使用不完整类型,让用户自定义数组大小。的主要内容,如果未能解决你的问题,请参考以下文章

C语言不允许使用不完整的类型报错是啥意思啊

C语言 不允许使用不完整的类型

C语言 不允许使用不完整的类型

c语言中,定义数组和引用数组时,其数组的下标的数据类型分别允许是啥?

如何在 TypeScript 中创建自定义类型

创建未知类型的数组。 C#