YS's develop story
C++ Error ) 기본 인수 재정의, 함수의 디폴트 값은 함수의 선언에 작성해야 한다. 본문
안녕하세요 ~
오늘은 기본 인수 재정의라는 에러와 함께
함수의 디폴트 값은 함수의 선언에 작성해야 한다는 것을 정리하기 위해 글을 씁니다.
바로 예제 코드를 확인해 보겠습니다~
우선 헤더파일에 hello함수 선언을 작성해주고, 함수의 디폴트 값을 작성해줍니다.
디폴트 값이란 사용자가 함수의 매개변수로 아무런 값을 입력하지 않았을 때 자동으로 저장되는 값 입니다.
즉, 사용자가 hello함수를 호출 할때 매개변수로 아무런 값을 지정해 주지 않으면
자동으로 i가 10으로 설정되는 것이죠.
void hello(int i=10);
그리고 함수의 정의를 작성해 줍시다.
void hello(int i=10){
cout << i;
}
그리고 메인함수에서 hello 함수를 호출 하면 어떻게 될까요?
int main() {
hello(5);
return 0;
}
이렇게 에러가 발생하게 됩니다.
원인은 바로 함수의 디폴트 값을 함수의 선언과 함수의 정의 부분에 전부 작성해서 그렇습니다.
함수의 디폴트 값은 함수의 선언부분에만 작성해 주면 됩니다.
헤더파일
void hello(int i=10);
함수의 정의파일
void hello(int i){
cout << i;
}
메인파일
int main() {
hello(5);
return 0;
}
이렇게 위처럼 소스코드를 수정해 주면 에러가 발생하지 않습니다.
그럼 반대로 헤더파일에는 디폴트 값을 지정하지 않고
함수의 정의파일에 디폴트값을 지정해 주면 어떻게 될까요?
void hello(int i);
void hello(int i=10){
cout << i;
}
int main() {
hello();
return 0;
}
이렇게 될 경우 다른 문제가 발생합니다.
사용자가 함수hello를 호출할 때 매개변수로 아무것도 입력하지 않았을 때
자동으로 디폴트값이 i에 저장되어야 하는데 저장되지 않습니다.
아래와 같은 에러가 발생하죠.
그러므로 정리하지면...
"함수의 디폴트값은 함수의 선언에만 작성하고 함수의 정의에는 작성하지 않는다",
"또한 함수의 정의 부분에만 디폴트값을 작성하면 안된다." 입니다.
그럼 다음 글에서 만나요 ~
'기타' 카테고리의 다른 글
C++ Error ) 식에 클래스 형식이 있어야 합니다, error C2288 , 디폴트 생성자 관련 실수 (1) | 2020.10.08 |
---|---|
C++ ) assert매크로사용하기 (0) | 2020.10.01 |
C언어 ) char [], char * 의 차이점 (0) | 2020.09.22 |
C++ ) Const reference parameter , Value parameter 의 비교 (0) | 2020.09.18 |
C++) 헤더파일 <algorithm>를 추가하고 사용할 수 있는 copy 함수 (0) | 2020.09.16 |