c++ 함수 오버로딩 에러
글쓴이: thsckdgus9 / 작성시간: 금, 2018/06/08 - 7:55오후
#include<iostream> using namespace std; int abs(int n); double abs(double n); int main(void) { cout << "-123 절대값: " << abs(-123) << endl; cout << "-12.345 절대값: " << abs(-12.345) << endl; return 0; } int abs(int n) { return n < 0 ? -n : n; } double abs(double n) { return n < 0 ? -n : n; }
오버로딩 조건이 1.매개변수 갯수가 다르다
2.함수 반환형이 다르다
위 두가지 중 하나라도 만족하면 되는걸로 알고 있는데 위 코드같이 반환형을 달리 해줘도 재정의라고 오류가 나네요..? 그래서 두 함수 모두 매개변수 1개씩 추가했는데 그 코드는 실행이 됩니다 왜그럴까요>?
Forums:
...
std::abs가 cmath에 정의되어 있고, 그게 iostream에 include가 되어서 global function인 abs--이 코드에서 직접 정의한 것--과 겹쳐서 그렇습니다. abs(-12.345)할 때 std:: 인지 ::인지 using namespace std 라인 때문에 알 수가 없어서요.
int type의 abs도 비슷하면서 다른 문제가 있는데 지금 호출되는 건 이 코드의 abs가 아니라 라이브러리의 ::abs인 것 같네요.
매개 변수를 추가하면, 이제 cstdlib/cmath의 abs와 겹치지 않기 때문에 컴파일이 됩니다.
댓글 달기