2016-10-25 1 views
-1

Я пытаюсь сделать простую программу, добавив узел в конец списка ссылок:Почему я вижу ошибку времени компиляции для ниже?

/*Insert Node at the end of a linked list 
    head pointer input could be NULL as well for empty list 

Node is defined as 
    struct Node 
    { 
    int data; 
    struct Node *next; 
    } 
*/ 

Node* Insert(Node *head,int data) 
{ 

    if(head){ 
     Node *curr_node=head; 

     while(curr_node->next) 
      curr_node=curr_node->next; 
    } 

    Node *new_node=(Node *)calloc(1,sizeof(Node)); 
    new_node->data=data; 
    new_node->next=NULL; 

    if(head) 
      curr_node->next=new_node; 
    else 
      head=new_node; 

    return head; 
} 

/* the main function calls it*/ 

, когда я компилирую, я вижу следующее сообщение об ошибке:

В функции «Node * Вставить (Node *, INT) ': solution.cc:59:13: ошибка: 'curr_node' не был объявлен в этой области curr_node-> следующая = new_node

почему это говорит curr_node не объявлена, когда он на самом деле объявленного в начале. Что мне здесь не хватает?

+3

'curr_node' только объявлена ​​внутри' if'-блока – Kninnug

+1

И кстати, нет 'Node', только' структура Node '. В следующий раз попробуйте отправить * реальный *, [минимальный, ** полный **, проверяемый пример] (https://stackoverflow.com/help/mcve), который воспроизводит вашу проблему. – WhozCraig

+1

Компилятор не сказал «не объявлен», он сказал * «в этой области» *. –

ответ

2

Переменная, объявленная в определении функции, имеет область действия, которая распространяется только на внутреннюю скобку {}. Таким образом, ваша переменная curr_node больше не действительна после первого блока if.

Чтобы исправить это, объявить переменную вне if блока:

Node* Insert(Node *head,int data) 
{ 
    Node *curr_node = NULL; 
    if(head){ 
     curr_node=head; 

     while(curr_node->next) 
      curr_node=curr_node->next; 
    } 
+0

ooo gotcha !! У меня создалось впечатление, что его область существует до конца функции (никогда не понимала, что это было до фигурных скобок). Благодаря!! :) –

Смежные вопросы