代码不会编译

时间:2013-11-29 21:34:01

标签: c error-handling queue

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

#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;
}

错误说“在文件范围内变化修改了'客户'”我是编程的初学者,只是这样做开始超越我的能力所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:2)

该行

static const int MAX_LENGTH = 100

是问题所在。替换为

#define MAX_LENGTH  100

查看原因here以及更多解释herehere或再次here

此外:

  • #endif后需要#ifndef
  • 您需要在某个地方使用main功能。

答案 1 :(得分:1)

在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;