2012-01-12 2 views
2

C++에는 서로간에 과부하가 걸릴 수있는 최대 함수 수가 있습니까?함수 오버로드의 최대 수는 얼마입니까?

"일치하는 기능 없음"오류가 발생했습니다. 나는 (배열/벡터에 대한 템플릿을 포함하여) 인코딩 할 각 struct/value 유형에 대해 약 900 가지 버전의 오버로드 된 encode 함수가 있습니다. encode 함수는 인코딩해야하는 필드에 따라 서로를 호출합니다.

encode(std::string) 함수를 파일 (.h & .cpp)의 맨 아래에 넣으면 "no matching function"이 반환됩니다. 그것이 정상 근처에 있다면 그들은 그렇지 않습니다.

더 중요한 것은 어떻게 해결해야합니까? 오류가 나타나는하고 기능을 넣을 위치에 따라 사라지고 당신의 설명으로

(리눅스 GCC 버전 4.6.1)

+0

900 과부하! – ronag

+6

900 개의 과부하가 발생합니다. ?????? ?? ????? 오버로드를 적절하게 그룹화하는 것으로 시작합니다. 일반적으로 대부분의 컴파일러는 버전 옵션을 지원합니다 ... 컴파일러의 설명서를 읽으십시오. – Nim

+0

왜 900 오버로드가 많은지 고려해보십시오. '스트림 연산자 << (stream, smtn_other)'의 오버로드는 어떨까요? – Lol4t0

답변

3

,이 오버로드의 수와는 아무 상관이있다. 오히려 문제는 선언하기 전에 오버로드를 호출하려고한다는 것입니다.

오버로드 또는 고유 한 이름이 있는지 여부에 관계없이 설명하는 것처럼 서로를 호출하는 많은 함수가있는 경우 일반적으로 먼저 모든 함수를 선언 한 다음 모든 정의가 끝나면 나중에 정의해야합니다 보았다. 일반적으로 선언문은 헤더 파일에 있으므로 (그래서 다른 파일과 포함) 정의는 모두 소스 파일 (헤더 포함)에 있으므로이 모든 것이 쉽게 작동합니다. 모든 컴파일 유닛에서 인라인되기 위해 일반적으로 헤더 파일에 정의되어야하는 인라인 함수가 있으면 상황이 더 복잡해 지지만 전체 패턴은 동일합니다. 먼저 모든 것을 선언 한 다음 모든 것을 정의하십시오.

편집

정확히 어디에 당신이 '일치 과부하'오류가있다? - encode 함수의 선언 이후에 오류가 발생하는 호출을 포함하는 DEFINITION을 이동해야합니다 (또는 오류가있는 DEFINITION 앞에 DECODER로 코드화를 이동하십시오). ALL DECLARATIONS가 ALL DEFINITIONS 이전에있는 한, 주문은 괜찮습니다.

+0

내 함수 선언과 템플릿을 소스 파일의 헤더와 함수 정의에 넣었으므로 필자의 경우에는 해당되지 않는다고 생각합니다. 필자가 "파일 맨 아래의 기능"이라고 말하면 헤더의 맨 아래로 선언을 이동시키고 소스의 맨 아래로 정의를 이동시키는 것을 언급했습니다. – Annan

+0

당신이 옳았어요! 헤더 파일에 있기 때문에 어떻게 든 별도의 정의가 필요하지 않은 템플릿에 대해 생각하고있었습니다.헤더의 맨 위에서 모든 템플릿 정의를 제공하고 정의를 맨 아래로 옮겼습니다. 모든 것이 작동합니다! :) – Annan

관련 문제