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
[52895] linker Error가 납니다. 꼭 봐주세요.
너무 배고파 [] 1223 읽음    2008-03-26 12:32
컴공과 대학생인데요.

그래프를 구현해서 깊이우선탐색 너비우선탐색 소스를 만들어서 실행했습니다.

그런데 실행하면 이런 메세지가 뜨더군요.

[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가 납니다. 꼭 봐주세요. 크레브 1302 2008/03/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.