궁금증 연구소

안녕하세요. 궁금증연구소 입니다.

오늘 포스팅 주제는 "Default argument value redeue redeclared for parameter 에러" 입니다.

 

c++ 에는 함수 오버로딩이 가능합니다. 쉽게 말하면 같은 이름을 가진 함수를 정의 할수 있습니다. 단, 함수의 매개변수의 타입이나 개수는 달라야 합니다. 리턴값은 상관 없습니다.

 

c에서 함수오버로딩 시도

 

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;
}

위 코드는 에러가 발생한다.

 

에러 메세지

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading