2012-07-29 2 views
0

peek 메서드가있는 스택 데이터 구조를 만들었습니다. 컴파일러에서 warning: initialization makes pointer from integer without a cast 경고를 주려고 할 때 peek을 호출 할 때 경고합니다. 여기에 내가 무엇을 가지고 :헤더 파일 링크

stack.h :

struct stack stack; 
stack_init(&stack); 

및 전화 들여다 :

struct stack_elem { 
    struct stack_elem *next; 
}; 

struct stack { 
    struct stack_elem *top; 
}; 

void stack_init(struct stack *stack); 
int isEmpty(struct stack *); 
struct stack_elem * peak(struct stack *); 

그리고 그 구현을 다음과 같이 내 main.c에서

void stack_init(struct stack *stack) { 
    stack->top = NULL; 
} 

int isEmpty(struct stack *stack) { 
    if (stack->top == NULL) 
     return 1; 
    else 
     return 0; 
} 

struct stack_elem * peek(struct stack *stack) { 
    if (isEmpty(stack) == 1) 
     return NULL; 
    else 
     return stack->top; 
} 

, 나는 스택을 정의 :

struct stack_elem * elem = peek(&stack); 

이 줄은 경고를 표시합니다. 이상한 것은 여기서 stack.cmain.c으로 가져오고 $ gcc main.c으로 컴파일하는 것입니다. 이것은 절대적으로 오류가 없었습니다. 이제 stack.h으로 가져 오기를 변경하고 경고를 던지는 $ gcc main.c stack.c으로 컴파일 중입니다. 그것도 실행 segfaults (그것은 미리하지 않았다).

+0

모든 소스 코드를 제공 할 수 있습니까? – laifjei

+0

왜 선언문에 다음과 같은 문장이 포함되어 있는지요 : node-> value.character = * p; '? – Aftnix

+0

@Aftnix 죄송합니다. 나는 이맥스 분할 화면에서 복사하고 그것을 실수로 복사했습니다. – darksky

답변

2

변경 :

struct stack_elem * peak(struct stack *); 

사람 :

struct stack_elem * peek(struct stack *); 

:)

+1

젠장,이 실수는 내가 벽에 머리를 10 번 부딪 치고 싶다. 그것이 없어야 할 때까지 오랫동안 노력하고있었습니다. 고마워요! 나는 새로운 쌍의 눈이 필요하다고 생각한다. – darksky

3

()가 .H에 선언되지 않은 들여다 것 같은데, 그래서 컴파일러는 int 형의 가정입니다 . main()은 그것을 포인터 리턴 타입이라고 가정합니다.

경고는 100 % 정확합니다!

3

헤더 파일에 오타가 있다고 보입니까?

struct stack_elem * peak(struct stack *); 

"peak"구현시 "peek"이라고 읽습니다. 그래도 그런 경고가 나올지 모르겠다.

+1

경고가 표시됩니다. 'peek()'은 암시 적으로'int'를 반환하는 함수로 선언되므로 변환 경고가 발생합니다. –