|
서찬 님이 쓰신 글 :
: linked list를 이용해서 다항식의 덧셈을 구현하고 하는데요.
: 아래와 같은 오류메시지가 출력됩니다.
: 이 구문에서 에러가 발생하는데요..
: a = (poly_pointer)malloc(sizeof(poly_node));
:
: poly_node는 분명히 정의를 해주었는데 왜 이런걸까요?
: 제가 혹시 뭔가 중요한 헤더파일을 빼먹고 있는 걸까요?
: 답변부탁드립니다.
:
: #include <stdio.h>
: #include <stdlib.h>
: #define IS_FULL(ptr) (!(ptr))
:
: typedef struct poly_node *poly_pointer;
: typedef struct poly_node {
: int coef;
: int expon;
: poly_pointer link;
: };
: poly_pointer a, b, d;
:
: poly_pointer padd(poly_pointer a, poly_pointer b);
: void attach(int coefficient, int exponential, poly_pointer *ptr);
: int compare(int x, int y);
:
:
: main() {
: a = (poly_pointer)malloc(sizeof(poly_node));
: attach(3, 14, &a);
: attach(2, 8, &a);
: attach(1, 0, &a);
: printf("%d", &a);
: }
:
: poly_pointer padd(poly_pointer a, poly_pointer b) {
: poly_pointer front, rear, temp;
: int sum;
: rear = (poly_pointer)malloc(sizeof(poly_node));
: if(IS_FULL(rear)) {
: fprintf(stderr, "The memory is full\n");
: exit(1);
: }
: front = rear;
: while(a && b)
: switch(compare(a -> expon, b -> expon)) {
: case -1:
: attach(b -> coef, b -> expon, &rear);
: b = b -> link;
: break;
: case 0:
: sum = a -> coef + b -> coef;
: if(sum) attach(sum, a -> expon, &rear);
: a = a -> link; b = b -> link;
: break;
: case 1:
: attach(a -> coef, a -> expon, &rear);
: a = a -> link;
: }
: /* 리스트 a와 리스트 b의 나머지를 복사하기 위한 부분 */
: for(;a;a->link) attach(a -> coef, a -> expon, &rear);
: for(;b;b->link) attach(b -> coef, b -> expon, &rear);
: rear -> link = NULL;
: /* 필요없는 초기 노드를 삭제 */
: temp = front; front = front -> link; free(temp);
: return front;
: }
:
: void attach(int coefficient, int exponent, poly_pointer *ptr) {
: poly_pointer temp;
: temp = (poly_pointer)malloc(sizeof(poly_node));
: if(IS_FULL(temp)) {
: fprintf(stderr, "The memory is full\n");
: exit(1);
: }
: temp -> coef = coefficient;
: temp -> expon = exponent;
: (*ptr) -> link = temp;
: *ptr = temp;
: }
:
: int compare(int x, int y) {
: if(x < y)
: return -1;
: else if(x == y)
: return 0;
: else
: return 1;
: }
:
:
:
:
: --------------------Configuration: poly_pointer_padd - Win32 Debug--------------------
: Compiling...
: poly_pointer_padd.c
: C:\......\poly_pointer_padd.c(19) : error C2065: 'poly_node' : undeclared identifier
: Error executing cl.exe.
:
: poly_pointer_padd.obj - 1 error(s), 0 warning(s)
안녕하세요 만해입니다.
컴공 학부생인가 보네요 이정도 프로그램을 스스로 작성하실수 있다면 미래가 기대 됩니다.
솔찍히 저 학부2,3 학년때 저정도 에 못 미쳤었거든요 ㅎㅎㅎ
원인은 간단 합니다.
C 에서 typedef struct A {} ; 이렇게 구조체를 이용해서 A 란 자료형을 정의해줘도
A 라는 자료형을 쓰기 위해서는 struct 라는 예약어가 앞에 붙어 있어야 자료형으로 인식해 줍니다.
a = (poly_pointer)malloc(sizeof(poly_node));
여기에서
a = (poly_pointer)malloc(sizeof(struct poly_node));
↑
struct 예약어를 하나 추가 시켜 주면 됩니다.
저 라인 뿐만 아니라 다른 라인에 있는 poly_node 형 자료 정의 시에도 poly_node 앞에 struct를 붙여 주시면
해결될것 같네요
그럼 즐프 하세요
|