2010-05-25 4 views
5

MySQL ++가 포함되고 링크 된 XCode 프로젝트를 컴파일 중입니다. 이 범위에 cpool.h에서"assert '는이 범위 내에서 선언되지 않았습니다."MySQL ++

원래, ++의 MySQL의 일부 헤더 파일을

'어설는'선언되지 않은 : 어떤 이유로, 나는 다음과 같은 컴파일러 오류가 계속. 아무도 이것이 왜 방아쇠를 당길 수 있는지 알고 있습니까?

편집 : 참고로, MySQL ++는 Macports를 통해 설치되었습니다.

+0

종종 줄 번호가 포함되어 있기 때문에 전체 오류 메시지를 게시하십시오. 'cpool.h'에서 ASSERT가 실패한 곳은 어디입니까? –

+0

Assert가 라인 78에서 실패했습니다. virtual ~ ConnectionPool() {assert (empty()); } 예, assert.h가 포함되었습니다. – Anonymous

+0

또한, MySQL ++는 Macports를 통해 설치되었습니다. – Anonymous

답변

6

가장 확실한 대답은 "assert.h"가 포함되지 않았거나 포함 경로에서 발견되지 않는다는 것입니다. 또 다른 설명은 헤더가 포함 된 후 어설 션 매크로가 정의되지 않은 것입니다.

편집 : assert.h가 포함되어 있고 표준 헤더이기 때문에 발견되는 순간이라고 가정하므로 위에서 언급 한 마지막 가능성을 우리에게 남깁니다. 정의되지 않았습니다.

cpool.h 자체가이 작업을 수행하지 않으므로 assert.h가 직접 또는 다른 제 3 자 헤더에 의해 간접적으로 포함 된 경우와 cpool.h를 포함하는 것과 정의되지 않은 상황이 포함되어야합니다. 이것은 cpool.h include를 파일의 맨 위로 이동하여 쉽게 테스트 할 수 있습니다.

+0

파일은 다음을 통해 프록시에 포함됩니다. #include . 이 파일을 파일 맨 위로 이동했지만 여전히 이러한 오류가 발생합니다. – Anonymous

+0

@Anonymous : mysql ++ .h 헤더 자체를 포함하고있는 파일인가? – Troubadour

+0

예.하지만 적절한 .cpp 파일을 이동해도 여전히 동일한 오류가 발생합니다. – Anonymous

2

include 경로에있는 다른 라이브러리의 "assert.h"파일이 다르고 시스템의 표준 <assert.h> 대신 무의식적으로 그 파일을 포함 할 수 있습니다.

Mac OSX에서 gstreamer를 사용하는 응용 프로그램을 작성할 때이 문제가 발생했습니다. gstreamer의 include 디렉토리 (/Library/Frameworks/GStreamer.framework/Headers)에는 비표준이고 실제 assert.h에 대한 부적절한 대체 파일 인 "assert.h"파일이 포함되어 있습니다. 컴파일 명령에 -I/Library/Frameworks/GStreamer.frameworks/Headers를 추가했을 때 갑자기 "#include <assert.h>"이라고 말한 소스가 gstreamer 버전을 포함하여 어디에 추가 되었습니까? 이로 인해 내 컴파일이 실패하고 같은 오류가 발생했습니다.

2

C++에서 cassert header를 추가하면 문제가 해결됩니다.

#include <cassert>