안녕하세요. 궁금증연구소 입니다.
오늘 포스팅 주제는 "Default argument value redeue redeclared for parameter 에러" 입니다.
c++ 에는 함수 오버로딩이 가능합니다. 쉽게 말하면 같은 이름을 가진 함수를 정의 할수 있습니다. 단, 함수의 매개변수의 타입이나 개수는 달라야 합니다. 리턴값은 상관 없습니다.
c에서는 함수의 이름이 같으면 매개변수가 달라도 에러가 발생합니다.
c++에서 같은 코드를 정의하면 에러없이 잘 적용 되는 것을 볼 수 있습니다. 함수 오버로딩을 이용하면, 같은 함수에 다른 유형의 매개변수를 받아야 하는 코드를 작성할 때 유용합니다. 이는 생성자에도 동일하게 적용되는데, 단 소멸자의 경우는 함수 오버로딩의 적용이 되지 않습니다.
그런데 매번, 이렇게 같은 이름의 매개변수가 다른 여러 함수를 만드는 것보다는, 매개변수의 default 값을 이용하면 간편하게 함수 오버로딩과 같은 효과를 누릴수 있습니다.
#include <iostream>
using namespace std;
// void fillLine(int a=25, char str='*');
void fillLine(int a =25, char str = '*'){
for(int i=0; i<a; i++){
cout<< str;
}
cout << endl;
}
main()
{
fillLine();
fillLine(10,'%');
}
위와같은 코드에서 fillLine() 함수의 매개변수를 하나도 적지 않은 경우는 fill함수에 미리 적어둔 default 값이 넘어 가게 됩니다. 매개변수를 적어주는 경우는 그 값이 넘어가게 됩니다.
그러면, fillLine(void) 함수와
fillLine(int, char) 함수 두개를 만드는 대신, 하나의 함수만으로 두 경우를 처리할 수 있습니다.
그런데, 이때, 주석처리한 부분처럼 함수를 선언해주면,
Default argument value redeue redeclared for parameter 에러가 발생합니다.
!! 매개변수를 활용한 함수를 선언할때는, 선언부분에만 함수 매개변수 값을 적어 줍니다.
- 선언과 구현에 모두 디폴트 값 표기시 컴파일에서
Default argument value redeue redeclared for parameter 에러 발생
- 선언에 표기하지 않고 구현에만 표기하면 함수 호출시 디폴트 값을 사용할 수 없다.
#include <iostream>
using namespace std;
void fillLine(int a=25, char str='*');
main()
{
fillLine();
fillLine(10,'%');
}
void fillLine(int a =25, char str = '*'){
for(int i=0; i<a; i++){
cout<< str;
}
cout << endl;
}
위 코드는 에러가 발생한다.
[c++] 생성자 호출 시점 (0) | 2022.09.24 |
---|---|
[c++] string.begin()의 포인터와 string name의 포인터는 다르다. (1) | 2022.09.23 |
[c++] 배열의 sizeof 연산자 구할때 주의할점(매개변수 sizeof와 차이) (2) | 2022.09.19 |
[C언어]Suspicious pointer conversion 에러 (0) | 2022.09.10 |
C언어 sizeof(자료형) 간단정리 (0) | 2022.08.10 |