获取一条错误消息,说明该变量尚未声明

时间:2014-04-01 15:36:47

标签: c struct declaration

这是我的代码:

struct data {
   char carReg[6]; 
   char make[20], model[20], colour[20];
   int numPrevOwners; 
   bool reserved; 
   float reserveAmount; 
};

struct node {
struct data *element;
struct node *next;
};

在我的主要方法中,我有这个:

struct node *current, *aNode;
struct data *anElement, *newCar;
FILE *file;

file = fopen("d:car.dat", "r"); //open the file for reading 
if (file == NULL) {
    printf("Nothing found in this file.\n\n");
    printf("\n");
}//end if
else {
    //If it does exist, cars in file should be copied into the linked list
    while(fread(&newCar, sizeof(struct data), 1, file)>0) {         

        aNode = (struct node *)malloc(sizeof(struct node));
        anElement = (struct data *)malloc(sizeof(struct data));

        strcpy(anElement->carReg ,newCar->carReg);
        strcpy(anElement->make, newCar->make);
        strcpy(anElement->model, newCar->model);
        strcpy(anElement->colour, newCar->colour);
        anElement->numPrevOwners = newCar->numPrevOwners;
        anElement->reserved = newCar->reserved;
        anElement->reserveAmount = newCar->reserveAmount;

         if (aNode == NULL)
           printf("Error - no space for the new node\n");

            else { // add data part to the node
                 aNode->element = anElement;
                 aNode->next = NULL;

                 if (isEmpty()) 
                 {
                  front = aNode;
                  last = aNode;
                  }

                  else {
                  last->next = aNode;
                  last = aNode;
                  }

               }
    }//end while

    printf("Cars in the system");
}//end else

我得到的错误信息是' carReg'尚未宣布,' make'尚未宣布等。

有人可以帮忙吗?

编辑 - 我已经更新了,它都编译但程序没有运行。它运行但是说title.exe已经停止运行。

1 个答案:

答案 0 :(得分:0)

struct data *anElement, *newCar;替换为struct data *anElement; struct data newCar;

当前fread()sizeof(struct data)字节读入指针(&newCar是指针的地址),这可能不是您想要的(这也是经典的缓冲区溢出)

这也将修复您正在获取的错误,因为您尝试使用.运算符通过指针访问struct成员。更改newCar定义将解决此问题。