2011-09-22 5 views
0

세 가지 크기의 정수에 대해 오버로드 된 함수를 정의하려는이 시도가 실패합니다. 왜?왜이 함수는 세 가지 정수 유형에 대해 과부하가 컴파일되지 않습니까?

byte hack(byte x) 
{ 
    return x+1; 
} 

unsigned short hack(unsigned short x) 
{ 
    return x+2; 
} 

unsigned int hack(unsigned int x) 
{ 
    return x+3; 
} 

컴파일러는 저에게 말한다 : 는 zzz.cpp : 98 : 오류 : 88 : 오류 : '서명 INT 해킹 (서명 int)를' zzz.cpp의 재정의 '바이트 해킹 (바이트)'이전에 정의 된 여기

+4

'byte'는 표준 유형이 아니기 때문에, 정의를 찾아서 여기에 입력 할 수 있습니까? –

답변

9

귀하의 컴파일러/코드는 매개 변수/또는 유형이 아닌 반환 형식과 계산에 의해

+0

+1 왜냐하면 내 컴파일러 (gcc)는 그렇게 생각하기 때문입니다. 왜? 내 책상에서 누군가가 "typedef unsigned int byte;"라고 멍청하게 썼기 때문에 잠시 전에 다른 버그를 쫓아 냈습니다. – DarenW

+2

@DarenW : 아마도'std :: uin8_t'를 직접 사용해야 할 것입니다. 또는 옥텟을 의미하지 않는다면'char'. – GManNickG

0

오버로드 기능은 다를 수 있습니다 ... 바이트 및 부호없는 INT같은 일 것으로 생각한다. 그래서, 이것들은 3 개의 다른 기능입니다.

+1

마지막으로, 함수의 인수 유형이 다른 경우 반환 함수에 따라 함수가 다를 수 있습니다. 그것은 템플릿 함수가 작동하는 방법입니다. : P 3 가지 기능이 서로 다릅니다. C++이 이름을 hack_ii_i와 같은 이름으로 바꾸기 때문에 이름이 같은 것은 컴파일러에게 아무런 의미가 없습니다. 이름은 단지 인간을위한 편의 일뿐입니다. – cHao

관련 문제