为什么我无法在C中为我的结构创建新节点? (使用Netbeans)

时间:2014-11-19 17:12:04

标签: c pointers netbeans struct stack

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

struct node{
 int info;
 node *link;
 };

 node *top = NULL;
 void push();
 void pop();
 void display();

 main()
 {
  int choice;

  while(1)
  {
  printf("Enter your choice:\n1.Push\n2.Pop\n3.Display\n4.Exit\n");
  scanf("%d",&choice);

  switch(choice)
  {
   case 1:
    push();
    break;
   case 2:
    pop();
    break;
   case 3:
    display();
    break;
   case 4:
    exit(1);
    break;
   default:
    printf("Wrong choice");
   }
//   getch();
  }
 }

 void push()
 {
  node *tmp;
  int pushed_item;
  tmp = new node;
  printf("Enter the value to be pushed in the stack:");
  scanf("%d",&pushed_item);
  tmp->info=pushed_item;
  tmp->link=top;
  top=tmp;
 }

 void pop()
 {
 node *tmp;
 if(top == NULL)
  printf("Stack is empty");
 else
  {
   tmp=top;
   printf("Popped item is %d",tmp->info);
   top=top->link;
   delete tmp;
  }
 }

 void display()
 {
 node *ptr;
 ptr = top;

 if(top==NULL)
 printf("Stack is empty");
 else
 {
 while(ptr != NULL)
  {
   printf("%d\n",ptr->info);
   ptr=ptr->link;
  }
 }
 }

每当我尝试创建新节点时都会收到错误,例如

 node *tmp;
 tmp = new node;

错误在第二行。它在TurboC ++等其他IDE中运行正常,但在Netbeans中,它给出了错误:“无法找到其声明的标识符。”

1 个答案:

答案 0 :(得分:5)

C中没有new(和delete)运算符。您必须使用标准函数malloc(和free)声明的un标头<stdlib.h>代替。

考虑到这个结构定义

struct node{
 int info;
 node *link;
 };
C中的

无效。您必须在链接定义中使用标记struct。例如

struct node
{
    int info;
    struct node *link;
};

C和C ++中的函数main应具有返回类型int

似乎TurboC ++将您的代码编译为C ++代码。