2013-04-17 1 views
0

현재 CPP 프로젝트에 라이브러리 (IsoAgLib)를 통합하려고합니다. 나는 CPP에 깊이 관여하지 않는다. 내가 얻는 오류 : "{ '토큰"앞에 unqualified-id가 있어야합니다. 다른 비슷한 문제를 접했을 때 템플릿과 관련이 있다고 생각합니다. 그것은 또한 abs 함수 호출과 관련이있을 수 있습니다. 어떤 도움을 많이 주시면 감사하겠습니다!'{'토큰 앞에서 부적합 ID가 필요합니다. t 템플릿 오류

편집 : 나는 템플릿 후 코드를 떠나고, 파일이 '{'토큰
오류 47 ')'전에 비정규-ID를 예상
토큰 전에

오류 45 예상 비정규-ID를 매우 크다 오류 46 전에 ')'예상 '{'토큰

이러한 오류의 모두가 "템플릿 인라인 T 복근 (CONST T & 발)"(내가 처음에 주석 왼쪽)

#ifndef UTIL_FUNCS_H 
#define UTIL_FUNCS_H 

#include <IsoAgLib/isoaglib_config.h> 
#ifdef USE_DATASTREAMS_IO 
class StreamInput_c; 
#endif 
#include <cstdlib> // Include before vector or else CNAMESPACE stuff is screwed up for Tasking 
#include <cstring> 
#include <vector> 
#ifdef USE_VT_UNICODE_SUPPORT 
#include <string> 
#endif 

// Begin Namespace __IsoAgLib 
namespace __IsoAgLib 
{ 
    template <class T> inline T abs(const T& val) 
    { 
    return (val < 0) ? (-val) : val; 
    } 

} // end of namespace __IsoAgLib 
#endif 
입니다 라인 (31)에서 발생
+3

어쩌면 파일 끝 부분에 a를 추가하여 네임 스페이스 문을 닫습니다. – Nagasaki

+4

밑줄이 있거나 밑줄이있는 대문자가있는 이름은 구현 (컴파일러) 용으로 예약되어 있으므로 사용해서는 안됩니다 . –

+0

@Nagasaki 파일이 실제로 더 커서 네임 스페이스가 닫힙니다. – Ryoooon

답변

0

일부 시스템에서는 abs()와 min() 및 max()와 같은 다른 것들은 선행 처리기 매크로로 구현됩니다.

#include <cstdlib> 

전처리 네임 스페이스에 대한 존중이없는 맹목적 전에 소스 코드에 복근의 정의를 대체 할 : 그건 당신의 경우가 있는지 확인하려면이 줄 끝에서 라인

#undef abs 

를 추가 그 결과가 통사론적인 혼돈이라 할지라도 그것은 컴파일러에게 공급됩니다.

관련 문제