C语言 错误:数组类型具有不完整的元素类型和二进制操作数错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18292248/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 07:12:06  来源:igfitidea点击:

Error: Array type has incomplete element type and binary operand error

carraysmultidimensional-arraycompiler-errors

提问by Nithin Kumar

I am trying to make a multi-program database in C.

我正在尝试用 C 制作一个多程序数据库。

Here is the code:

这是代码:

#include<stdio.h>
#include<stdlib.h>
#include "function.c"


int main()
{
info();
example();

printf("\n\n\n");

char name[1][10], id[1][10], grade[1][1];
char choice;
int x=0;
int sal[1];
FILE *fp;

printf("Would you like to continue? Y/N: ");
scanf("%c",&choice);
fflush(stdin);

if(choice == 'Y' || choice == 'y')
{
    system("cls");

    fp = fopen("database.txt","w");

    if(fp == NULL)
    {
        printf("File does not exist!");
        return 0;
    }
    else
    {
        while(x<=1)
        {
            printf("Enter Employee name no.%d: ",(x+1));
            scanf("%s",name[x]);
            fprintf(fp, "Employee Name: %s\n",name);

            printf("Enter Employee ID: ");
            scanf("%s",id[x]);
            fprintf(fp, "Employee ID: %s\n",id);

            printf("Enter Employee Grade Level (A-E): ");
            scanf("%s",grade[x]);
            fprintf(fp, "Employee Grade Level: %s\n",grade);

            printf("Enter Employee's Basic Salary: ");
            scanf("%d",&sal[x]);
            fprintf(fp, "Employee's Basic Salary: %d\n\n\n",sal);

            printf("Employee's bonus: %d\n",bonus(grade[x],sal[x]));

            printf("Employee's allowance: %d\n",allowance(grade[x], sal[x]));

            printf("\n");
        }
    }   
    fclose(fp);
}
else
{
    return 0;
}




return 0;
}

function.c :

函数.c:

#include<stdio.h>
#include "function.h"

int bonus(char *grade[1][], int *sal[])
{
int bonus;
int *b;
int x;

b = &bonus;

for(x=0;x<=1;x++)
{

    switch(*grade[x])
    {
        case 'A':
            bonus = (1/4) * *sal[x];
            break;
        case 'B':
            bonus = (1/5) * *sal[x];
            break;
        case 'C':
            bonus = (15/100) * *sal[x];
            break;
        case 'D':
            bonus = (1/10) * *sal[x];
            break;
        case 'E':
            bonus = (5/100) * *sal[x];
            break;
        default:
            printf("Invalid Choice!!");
            break;
    }

    return bonus;
    }
}

int allowance(char *grade[1][], int *sal[])
{
int all;
int *a;
int x;

a = &all;

for(x=0;x<=1;x++)
{
    switch(*grade[x])
    {
    case 'A':
        all = (3/10) * *sal[x];
        break;
    case 'B':
        all = (6/25) * *sal[x];
        break;
    case 'C':
        all = (9/50) * *sal[x];
        break;
    case 'D':
        all = (3/25) * *sal[x];
        break;
    case 'E':
        all = (3/50) * *sal[x];
        break;
    default:
        printf("Invalid Choice!!");
        break;
    }

    return all;
    }

}

function.h:

函数.h:

#ifndef _FUNCTION_H_INCLUDED
#define _FUNCTION_H_INCLUDED

int bonus(char *grade[][], int *sal[]); //prototype for calculating bonus
int allowance(char *grade[][], int *sal[]); //prototype for allowance
void info(); //prototype for information
void example(); //prototype for example

#endif

When I try to compile the program, I get:

当我尝试编译程序时,我得到:

2   0   function.c  In file included from function.c
4   17  function.h  [Error] array type has incomplete element type
5   21  function.h  [Error] array type has incomplete element type
4   17  function.c  [Error] array type has incomplete element type
function.c  In function 'bonus':
18  19  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')
21  19  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')
24  22  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')
27  20  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')
30  21  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')
function.c  At top level:
41  21  function.c  [Error] array type has incomplete element type
function.c  In function 'allowance':
54  17  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')
57  17  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')
60  17  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')
63  17  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')
66  17  function.c  [Error] invalid operands to binary * (have 'int' and 'int *')

I do not know what the problem is (I'm a beginner in C programming).

我不知道问题是什么(我是 C 编程的初学者)。

My first question: What does array type has incomplete element type mean? Next question: Why am I still getting the invalid operands to binary * error?

我的第一个问题:数组类型具有不完整的元素类型是什么意思?下一个问题:为什么我仍然将无效的操作数变为二进制 * 错误?

Any help would be appreciated.

任何帮助,将不胜感激。

回答by bhathiya-perera

for "My first question: What does array type has incomplete element type mean?"

对于“我的第一个问题:数组类型具有不完整的元素类型是什么意思?”

this error occur because in c language you need to specify the array size if you are not declaring it like

发生此错误是因为在 c 语言中,如果您没有像这样声明数组大小,则需要指定数组大小

int arr[] = {6,1,2,3};

int arr[] = {6,1,2,3};

otherwise

除此以外

it should be int arr[<size of the array>];

它应该是 int arr[<size of the array>];

for invalid operands to binary * error?

对于二进制 * 错误的无效操作数?

it occurs because you are trying to multiply intand int *values

它发生是因为你试图乘以intint *

consider seeing this http://forums.devshed.com/c-programming-42/dynamic-arrays-with-undeclared-size-62036.html

考虑看看这个http://forums.devshed.com/c-programming-42/dynamic-arrays-with-undeclared-size-62036.html

and read some more tutorials about pointers and arrays and how to mix them

并阅读更多关于指针和数组以及如何混合它们的教程

回答by Jonathan Leffler

In the declarations in function.h, you have:

在 中的声明中function.h,您有:

int bonus(char *grade[][], int *sal[]);

You can't leave out all the dimensions; you have to specify a number for every dimension of an array except, perhaps, the first. For example, this might be legitimate:

你不能遗漏所有的维度;您必须为数组的每个维度指定一个数字,也许除了第一个维度。例如,这可能是合法的:

int bonus(char *grade[][20], int *sal[]);

I've not checked whether 20 is the appropriate number, but some number must be used in the context.

我没有检查 20 是否是合适的数字,但必须在上下文中使用一些数字。

This is causing the 'incomplete array type' message.

这会导致“不完整的数组类型”消息。