2016-02-10 2 views
-1

я не могу найти эту ошибку синтаксиса, который читает:Ожидаемый идентификатор или «(» перед синтаксисом «символ» ошибка

/home/ubuntu/workspace/stack.c:6:12: error: expected identifier or ‘(’ before ‘char’
char stack(char cmd[40])
^

символ^находится под второй с в стеке (полукокса, я посмотрел вокруг, и я не могу найти ответ, большинство из них - это что-то простое: в конце основной функции, но я не вижу ничего плохого в этом. У кого-то есть идея?

stack.c

#ifndef stack 
#define stack 
#include <stdio.h> 
#include "stack.h" 

char stack(char cmd[40]) 
{ 

stacks newstack() 
{ 
    stacks s; 
    s -> head = NULL; 
    return s; 
} 

void deletestack(stacks s) 
{ 
    node temp; 
    while(s -> head) 
    { 
     temp = s -> head; 
     s -> head = s -> head -> next; 
     free(temp); 
    } 
    free(s); 
} 

int isEmpty(stacks s) 
{ 
    if(s -> head == NULL) 
     return 1; 
    else 
     return 0; 
} 

void push(stacks s, element e) 
{ 
    node n = (node)malloc(sizeof(node_type)); 
    n -> e = e; 
    n -> next = s -> head; 
    s -> head = n; 
} 

element peek(stacks s) 
{ 
    return s -> head -> e; 
} 

void display(stacks s) 
{ 
    while(s -> head) 
    { 
     printf("%d\n", s -> head -> e); 
    } 
} 

element pop(stacks s) 
{ 
    printf("%d\n", s -> head -> e); 
    temp = s -> head; 
    s -> head = s -> head -> next; 
    free(temp);   
} 



} 
#endif 

stack.h

#ifndef ____Linked_List_H____ 
#define ____Linked_List_H____ 

#include "stdheader.h" 

//Structures 

//element is content of a node. 
typedef int element; 

//node is 1 link in a linked list. 
struct _node{ 
    element e; 
    struct _node* next; 
}; 

typedef struct _node node_type; 
typedef struct _node* node; 

//linked list is a series of links tracked by the head or start of the list.     struct _linked_list{ 
    node head; 
}; 

typedef struct _linked_list stacks_type; 
typedef struct _linked_list* stacks; 

stacks newstack(); 
void deletestack(stacks); 
int isEmpty(stacks); 
element pop(stacks); 
void push(stacks, element); 
element peek(stacks); 
void display(stacks); 


#endif 
+3

Похоже, у вас есть точка с запятой из 'stack.h'. Можете ли вы опубликовать этот код? Кроме того, вы пытаетесь определить функции внутри функций, которые не разрешены в C. – templatetypedef

+1

Вы пропустили что-то в файле заголовка. – Holsety

+0

Идентификаторы, начинающиеся с double-underscore, зарезервированы для реализации. Не используйте их в пользовательском коде! И не указатель 'typedef'! Это сглаживает семантику и является приглашением для логических ошибок в коде. – Olaf

ответ

2

Вы не можете использовать #define stack, а затем позже в коде, назвать стек функций. И вы не можете определять функции внутри функции.

+0

Да, это было, спасибо. Первый раз работая с несколькими файлами в c, поэтому я не заметил. Опять же, спасибо. – BlackTecno

+0

На самом деле есть больше недостатков и одна ошибка, которая, вероятно, вызвала ошибку. – Olaf

+0

Да, я знаю, работая через это сейчас. Просто это была одна ошибка, из-за которой я не мог пройти мимо. – BlackTecno

0
#define stack 

Эта строка сообщает предкомпилятора обмена символ stack ни с чем.

не Препроцессор обрабатывает эту строку:

char stack(char cmd[40]) 

в это:

char (char cmd[40]) 

Без имени функции, код больше не действует C.

Я не вижу почему нужен #define, поэтому я просто удалю его.

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