티스토리 뷰

본 포스팅은 렉토피아(http://www.lectopia.com) 의 대학 IT 특강 중

정혜경의 C언어 & 기초 자료구조 강의를 수강하는 수강생이 올린 질문글을 토대로 작성하였습니다.


질문.


>수업시간에 알려주신 call by pointer기법으로 3가지 변수 받는 프로그램인데

>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#pragma warning(disable : 4996)
#include<stdio.h>
 
void input(char*int*double*);
void output(charintdouble);
int main()
{
    char name[20];
    int age = 0;
    double height = 0;
    input(name, &age, &height);
    output(name[20], age, height);
    return 0;
}
void input(char *cp, int *ip, double*dp)
{
    printf("이름 입력 : ");
    scanf("%s", cp);
    printf("나이 입력 : ");
    scanf("%d", ip);
    printf("신장 입력 : ");
    scanf("%lf", dp);
    return;
}
 
void output(char name[20], int age, double height)
{
    printf("%s는 %d세이고 %lfcm이다.\n", name[20], age, height);
    return;
}
cs

>

>컴파일 에러는 없는데 링크 에러가 발생했는데

>뭐때문에 발생한건지 못잡겠습니다.

>

>에러 코드가

>error LNK1120 : 1개의 확인할 수 없는 외부참조입니다.

>error LNK2019 : "void_cdecl output(char, int, double)"(?output@@YAXDHN) 외부 기호(참조 위치 : _main 함수)에서 학인하지 못했습니다.

>

>이렇게 나오는데 어떤 부분이 잘못된걸까요??



답변.

링크 에러는 보통 함수가 많거나 적을때 발생해요~~

자주 발생하는 에러는 그 종류를 기억해서 해결하면 이후에도 같은 에러가 발생했을때 훨씬 수월하게 진행 할 수 있을거에요 ~~


함수가 많거나 적을때 발생한다고 했는데 이게 무슨말이냐면 코드에서 한번볼게요


함수 선언부에서 void output(char, int, double) 이라고 선언을 했죠??

근데 정의부를 보면 void output(char name[20], int age, double height) 이렇게 되어있어요


여기서 문제 name[20]은 char형일까요 char*일까요 ㅎㅎㅎ


에러메세지를 자세히 들여다 보면 뭐라는지는 몰라도 output이라는 이름이 들어간걸로 유추해 봤을때 output 함수와 관련이 있다는걸 유추해 볼 수 있죠?? 그럼 output함수의 선언정의가 틀렸나 유심히 들여다 보면 되요. 링크에러는 이런식으로 해결할 수 있어요~~


이 문제를 해결함에서 끝내지 말고 앞으로 같은 에러가 나왔을때도 위와같은 방식으로 잡아 보아요~~

'개발노트 > 질문과 답변' 카테고리의 다른 글

Q&A : 함수의 반환값  (0) 2015.07.02
Q&A : Call by pointer 란?  (0) 2015.07.02
Q&A : 함수의 반환값과 함수 선언부  (0) 2015.06.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함