2012-07-23 4 views
0

두 개의 다른 헤더 파일 (하나는 표준 assert.h 임)과 assert 함수가 있습니다. 이러한 헤더 파일을 제어 할 수 없어 (그래서 변경할 수 없습니다). 이 두 함수 사이의 충돌을 설명하는 컴파일러 오류가 발생합니다. assert.h의 assert 함수를이 컴파일러 오류를 제거하는 데 사용해야한다는 것을 코드에서 어떻게 지정할 수 있습니까?C++ - 같은 이름을 가진 함수

+0

[이것은 매크로가 아니며 기능입니다] (http://en.cppreference.com/w/cpp/error/assert). '#undef assert'해야합니다. 그래도 잘 될지 모르겠다. – chris

+0

정확한 오류를 게시하십시오. 보시다시피, 모호한 질문은 추측으로 이어집니다. –

+0

사이드 노트 : 당신은'assert.h'가 아니라'cassert'를 사용해야합니다. 물론 네임 스페이스 배치는 매크로 일 때 중요하지 않습니다. – chris

답변

0
namespace OtherAssert 
{ 
#include "private_assert.h" 
} 
//... 
void foo() 
{ 
    OtherAssert::assert(true); // non-standard assert 
    assert(true); // the one from standard assert.h 
} 
+2

이렇게하면 코드를 컴파일 할 수 있지만 더 이상 작업하지 않으면 (일반적으로) 링크되지 않습니다. 링커는'OtherAssert :: assert'를 찾을 것이고, 라이브러리가 (명백히)':: assert'를 대신 포함하고 있기 때문에 헤더에 선언 된 모든 함수가 인라인 함수로 정의되어 있지 않으면 링크가 실패합니다. –

+0

@JerryCoffin 물론 자세한 내용에 따라 다릅니다. (아마도 함수가 인라인으로 선언 된 것 같습니다.) – cdhowie

+0

@cdhowie : 좋은 지적입니다. 수정 됨. –

관련 문제