这段代码无法编译:“在文件范围内可变地修改了'customer'”

knsnq2tg  于 2023-08-03  发布在  其他
关注(0)|答案(2)|浏览(90)

我试图在我的程序中使用队列,但它无法编译,我不知道为什么。代码的相关部分如下。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#ifndef CUSTOMER
#define CUSTOMER

typedef int bool;

int r;

typedef struct{

    int arrival;
    int leaving;

} Customer;

static const int MAX_LENGTH = 100;

typedef struct{
    int head;
    int length;

    Customer customer[MAX_LENGTH];

} CustomerLine;

void initializeQueue(CustomerLine* queue)
{
    (*queue).head = 0;
    (*queue).length = 0;
}

bool hasNext(CustomerLine* queue)
{
    return (*queue).length > 0;
}

bool isFull(CustomerLine* queue)
{
    return (*queue).length == MAX_LENGTH;
}

bool enqueue(CustomerLine* queue, Customer* customer)
{

    if(isFull(queue))
        return 0;
    int index = ((*queue).head + (*queue).length) % MAX_LENGTH;
    (*queue).customer[index] = *customer;
    (*queue).length++;

    return 1;
}

Customer* dequeue(CustomerLine* queue)
{
    if(!hasNext(queue))
        return 0;

    Customer* result = &(*queue).customer[(*queue).head];

    (*queue).length--;
    (*queue).head = ((*queue).head + 1) % MAX_LENGTH;
    return result;
}

字符串
错误说:
在文件范围内可变修改的“客户”

deyfvvtc

deyfvvtc1#

那条线

static const int MAX_LENGTH = 100

字符串
就是问题所在替换为

#define MAX_LENGTH  100


查看为什么here和更多解释herehere或再次here
此外:

  • #ifndef之后需要一个#endif
  • 你需要一个main函数。
mwecs4sa

mwecs4sa2#

在C中,const表示只读,不是常量,可以像宏一样使用。你不能像在这里那样使用变量来指定数组的维数:

static const int MAX_LENGTH = 100;
typedef struct{
   int head;
   int length;
   Customer customer[MAX_LENGTH];  /* Wrong. MAX_LENGTH is not a compile time constant. */
} CustomerLine;

字符串

相关问题