0

我不明白这段代码有什么问题。我得到了几个

C2227:“->status”左侧必须指向类/结构/联合/通用类型

C2065:“头”:未声明的标识符

C3861:“主要”:找不到标识符

我想访问位于队列头部的项目的状态,并在定义中给出的 3 个状态之间更改它的值。但是我在尝试访问它时做错了我不知道的事情。这是代码:

#define TOTALPACKETS 100
#define WINDOW   5
#define ACK      2
#define PENDING  1
#define NEW      0 


typedef int Item ;
typedef struct node *link;  
struct node{                
    Item data;
    Item status;
    link next; 
};

int QUEUEempty(link head){
    return head==NULL;
}

void QUEUEput(link *head, link *tail, Item data, Item status){
    if (*head==NULL){
                    (*tail)=(link)malloc(sizeof(node)); 
                    (*tail)->data=data;
                    (*tail)->next=NULL;
                    (*tail)->status=NEW;
                    *head=*tail;
                    return;}
    (*tail)->next=(link)malloc(sizeof(node));
    *tail=(*tail)->next;
    (*tail)->data=data;
    (*tail)->next=NULL;
    (*tail)->status=NEW;
    return;
}

Item QUEUEget(link *head){
    Item data=(*head)->data;
    link t=*head;
    *head=(*head)->next;
    free(t);
    return data; 
}

void send(int sPacket){
    (*head)->status=PENDING;//c2227,c2065
    printf("Packet No. %d: %d",sPacket,*head->status);//c2227,c2065
}

void receive(){
    if ((*head)->status==PENDING || (*head)->status=NEW) {//c2227,c2065
        (*head)->status=ACK; //c2227,c2065
          }
    }
    
    
int main() { 
    int i,j,k,packets=0;
    link head=NULL,tail=NULL;
    for(i=0;i<TOTALPACKETS;i++){
            QUEUEput(&head,&tail,i,NEW);
            packets++;
    }
    while(!QUEUEempty(head)){   
        for (j=0;j<WINDOW;j++){
            k=TOTALPACKETS-packets;
            send(k);
            receive();
            if ((*head).status==ACK){
            printf("Packet No. %d: %d",k,*head->status); 
            QUEUEget(&head);
            }
        }
    }
return 0;
 }
4

2 回答 2

2

您未能head通过send()and receive()

至于您的main(),请参阅C++ 中 main 签名的参数是否具有 unsiged 和 const 限定符?

于 2013-04-12T13:53:28.010 回答
0

main 有一个预定义的形式。您可以使用:

int main ()  /* or: int main(int argc, char* argv[]) */  {

还:

typedef int Item ;
struct node;
typedef node* link;  
struct node{                
    Item data;
    Item status;
    link next; 
};

...
   link head=nullptr,tail=nullptr;
...
   if (head->status==ACK){
        printf("Packet No. %d: %d",k, head->status); 


}

head是一个link,指向的指针node。另外,您忘记传递headsendand receive

void send(int sPacket,link head ){

利用send(sPacket,head)

于 2013-04-12T13:54:48.543 回答