C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[52897] Re:linker Error가 납니다. 꼭 봐주세요.
크레브 [kkol] 1301 읽음    2008-03-26 13:11
error("큐가 공백상태입니다");

error라는 함수 코딩이 없는데요?


너무 배고파 님이 쓰신 글 :
: 컴공과 대학생인데요.
:
: 그래프를 구현해서 깊이우선탐색 너비우선탐색 소스를 만들어서 실행했습니다.
:
: 그런데 실행하면 이런 메세지가 뜨더군요.
:
: [Linker Error] Error: Unresolved external '_error' referenced from C:\DOCUMENTS AND SETTINGS\김진우\MY DOCUMENTS\BORLAND STUDIO PROJECTS\DEBUG_BUILD\UNIT1.OBJ
:
: 제가 볼때 마지막에 있는 bfs함수때문에 저런 메세지가 뜨는거 같은데 왜 뜨는지 알수가 없습니다. 비주얼c++은 안깔려있어서 아직 테스트를 못해봤네요.
:
: 왜 이런 에러가 뜨는지 알고싶습니다. 소스자체 문법은 별 문제 없는거 같은데요.
:
: #include <stdio.h>
: #include <stdlib.h>
: #include <conio.h>
: #define NUM 8
: #define MAX 10
:
:
: typedef struct node node;
: typedef node* nodeptr;
: typedef int element;
:
: typedef struct {
:     element  queue[MAX];
:     int  front, rear;
: } QueueType;
:
: struct node {
:     int vertex; // 정점 표현
:     nodeptr link;
: };
:
: typedef struct {
:     int v1;
:     int v2;
: } edge;
:
: int visited[NUM] = {0};
: int start = 1;
: int i;
: int main()
: {
:     nodeptr headers[NUM];
:     void createGraph(nodeptr headers[]);
:     void insertEdge(nodeptr headers[], edge e);
:     void printGraph(nodeptr headers[]);
:     void dfs(nodeptr headers[], int vertex);
:     void bfs(nodeptr headers[], int vertex);
:
:
:     createGraph(headers); // 그래프를 생성한다.
:     printGraph(headers);// 그래프를 출력한다.
:     printf("Graph traversal by depth first search\n");
:     dfs(headers, start); // 깊이 우선순서에 의해서
:     bfs(headers, start);
:     getch();
: }
:
: void createGraph(nodeptr headers[])
: {
:     edge e;
:
:     void initGraph(nodeptr []);
:     edge createEdge(void);
:     void insertEdge(nodeptr[], edge);
:     int isMoreEdge(void);
:
:     initGraph(headers); // 그래프를 초기화한다.
:
:     // 그래프에 간선을 추가한다
:     while (isMoreEdge()) {  // 추가할 간선이   존재하면,
:         e = createEdge();   // 간선을 생성하고,
:         insertEdge(headers, e);  // 간선을 그래프에 추가한다.
:     }
: }
:
: int isMoreEdge()
: {
:     char ans, dummy;
:
:     printf("\n");
:     printf("Do you want to insert a edge? (y/N): ");
:     ans = getchar();
:     dummy = getchar();
:
:     // 사용자가 y나 Y를 입력하면 1을 반환, 그렇지 않으면 0을 반환
:
:     if (ans == 'y' || ans == 'Y')
:         return 1;
:     else
:         return 0;
: }
:
:
:
: void initGraph(nodeptr headers[])
: {
:     int i;
:     for (i=0; i<NUM; i++)
:     {
:         headers[i] = NULL;
:     }
: }
:
: edge createEdge()
: {
:     int v1, v2;
:     char dummy;
:     edge e;
:
:     // 시작 정점을 읽어들인다
:
:     printf("\n");
:     printf("Enter a starting vertex: ");
:     scanf("%d", &v1);
:
:     // 끝 정점을 읽어들인다.
:
:     printf("Enter an ending vertex: ");
:     scanf("%d", &v2);
:     dummy = getchar();
:
:
:     // 간선을 생성한다.
:
:     e.v1 = v1;
:     e.v2 = v2;
:
:     return e;
: }
:
: void insertEdge(nodeptr headers[], edge e)
: {
:     nodeptr tmp;
:
:     tmp = (nodeptr) malloc(sizeof(node)); // 노드 생성
:     tmp->vertex = e.v2;
:     tmp->link = headers[e.v1]; // 헤드 노드 앞에 삽입
:     headers[e.v1] = tmp;
: }
:
: void printGraph(nodeptr headers[])
: {
:     nodeptr tmp;
:     int i;
:
:     for (i = 0;i < NUM; i++) { // 각 헤드 노드에 대해서
:         printf("Vertex %d:", i);
:         tmp = headers[i];
:         while (tmp != NULL) { // 정점에 인접된 각 노드에 대해서
:             printf("%d ", tmp->vertex);
:             tmp = tmp->link; // tmp를 다음 인접노드로 이동
:         }
:         printf("\n");
:     }
: }
:
: void dfs(nodeptr headers[], int i)
: {
:     nodeptr tmp; //생성된 노드
:     printf("vertex %d\n", i);
:     visited[i] = 1;
:     for (tmp = headers[i]; tmp!= NULL; tmp = tmp->link)
:         if (visited[tmp->vertex] != 1)
:         dfs(headers, tmp->vertex);
: }
:
: // 공백 상태 검출 함수
: int is_empty(QueueType *q)
: {
:     return (q->front == q->rear);
: }
: // 포화 상태 검출 함수
: int is_full(QueueType *q)
: {
:     return ((q->rear+1)%MAX == q->front);
: }
: // 삽입 함수
: void enqueue(QueueType *q, element item)
: {
:       if( is_full(q) )
:         error("큐가 포화상태입니다");
:     q->rear = (q->rear+1) % MAX;
:     q->queue[q->rear] = item;
: }
: // 삭제 함수
: element dequeue(QueueType *q)
: {
:        if( is_empty(q) )
:         error("큐가 공백상태입니다");
:     q->front = (q->front+1) % MAX;
:     return q->queue[q->front];
: }
: // 삭제 함수
: element peek(QueueType *q)
: {
:     if( is_empty(q) )
:         error("큐가 공백상태입니다");
:     return q->queue[(q->front+1) % MAX];
: }
: void bfs(nodeptr headers[], int i)
: {
:     nodeptr tmp;  // 생성된 노드
:     QueueType q;  // 너비우선탐색에 사용될 큐
:     initGraph(&q); // 큐 초기화
:     visited[i] = 1;      // 정점 v 방문 표시
:     while(!is_empty(&q))
:     {
:         i = dequeue(&q);        // 큐에 저장된 정점 선택
:         for(tmp = headers[i]; tmp; tmp = tmp->link)
:         {
:             if(!visited[tmp->vertex])
:             {    // 미방문 정점 탐색
:                 visited[tmp->vertex] = 1;   // 방문 표시
:                 printf("%d ", tmp->vertex);
:                 enqueue(&q, tmp->vertex);    //정점을 큐에 삽입
:             }
:         }
:     }       // 방문한 정점 출력        // 시작정점을 큐에 저장
:
: }

+ -

관련 글 리스트
52895 linker Error가 납니다. 꼭 봐주세요. 너무 배고파 1223 2008/03/26
52897     Re:linker Error가 납니다. 꼭 봐주세요. 크레브 1301 2008/03/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.