컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Sunday, February 17, 2008

sqrt: ambiguous call to overloaded function 함수 에러 문제 해결 방법


C/C++에서 루트(제곱근)를 구하는 수학 함수인 sqrt()를 사용할 때, error C2668: 'sqrt' : ambiguous call to overloaded function 이라는 에러 메시지가 나오고 컴파일이 안되는 경우가 있습니다.

"ambiguous call to overloaded function"이란, 오버로딩 함수를 불불명하게 호출했다는 뜻입니다.

sqrt 함수에, 예를 들어, sqrt(2) 이렇게 정수 파라미터를 입력했을 때 위의 에러가 발생합니다.

sqrt 함수에는 반드시 실수를 넣어 주어야 합니다.

따라서 sqrt(2.0) 이렇게 적으면, 에러 없이 루트2가 구해집니다.


sqrt라는 이름을 가진 함수는 1개가 아니라 다음과 같이 3개입니다.

long double sqrt(long double)
float sqrt(float)
double sqrt(double)


"long double"형의 숫자를 입력하면 1번째 sqrt함수가 호출되고, double형 숫자를 인수로 넣어주면 3번째 sqrt함수가 호출되는 식입니다. 대부분 3번째인 "double sqrt(double)" 함수가 사용됩니다.

이름이 같은 함수가 여러 개 있고, 입력하는 파라미터(인수)의 종류와 개수에 따라 각각의 적당한 함수가 호출되는 것을 "함수 오버로딩"이라고 합니다.

그런데 sqrt(2) 이렇게 했을 때, "2"는 실수가 아니라 정수(int)입니다. 정수를 받는 sqrt함수는 없기에 "ambiguous call to overloaded function" 이런 에러가 납니다.

따라서 sqrt 함수에 넣는 인수가 정수일 때에는 실수로 변환하여 입력하면 에러가 해결됩니다.

아래 페이지에 예제 소스가 있습니다:
▶▶ C언어] C에서 제곱근, 루트 근사값 계산 방법, sqrt() 함수 사용법


함수 오버로딩은 C에는 없고, C++에만 있는 기능입니다. 그러나 C++ 모드로 C소스를 컴파일하면 역시 위의 에러가 납니다. C소스 확장자를, ".c"에서 ".cpp"로 바꾸면 C++ 모드로 컴파일됩니다.




tag: cpp
C언어 | C/C++ (Visual C++)

1 Comments:
At March 13, 2011 at 5:06 AM, Blogger Unknown said...

정말 고맙습니다.^-^

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top