2011-06-10 2 views
0

swig를 사용하여 Python으로 스크립트를 작성하여 내 C++ 함수를 호출 할 수 있습니다. 나는 멀리까지 가졌어.SWIG 오류 : 'extern'및 나중에 '정적'으로 선언되었습니다.

여기에서 포함 경로는 내 python27의 포함 디렉토리입니다.

gcc로 컴파일 할 때 많은 함수가 extern으로 선언되었고 이제는 정적이라는 많은 오류가 발생합니다. 원래의 cpp 파일에서 필자는 일부 함수를 정적으로 선언했습니다. 나는 extern이라고 선언 한 적이 없다. 이것이 원인 일 수 있습니까?

이것은

static bool myfunc1(void); 

static bool myfunc2 (type1 *Entry, type2 *Block, type2 *Data); 

static bool myfunc3 (type2 *Data, type3 **Records, type2 **Header); 

type4 myfunc4 (void) ; 

나는 GCC 작업을 수행 할 때 -c 읽기 쓰기 내 인터페이스 파일

/* Interface */ 
%module ReadWrite 
%{ 
    #include "ReadWrite.h" 

%} 
%include "ReadWrite.h" 

헤더 파일의 미리보기가 (이름 변경) (아무것도 통근으로 선언되지 않음) 다음과 같습니다이다 .cpp ReadWrite_wrap.cxx -shared -Ic : \ includepath, gcc와 같은 오류가 발생합니다 :

ReadWrite.cpp:682:79: error: 'bool myfunc3 (type2 *Data, type3 **Records, type2 **Header)' was declared 'extern' and later 'static'

+0

문제가되는 코드 조각이 없으면 이해할 수없는 추측을 할 수 없다고 생각합니다. –

+0

메인 포스트에 코드를 추가합니다. 순간. – limenuke

+0

예, 그렇지만 정확한 컴파일러 오류일까요? –

답변

5

fac 프로토 타입으로 헤더에 나타나면 암시 적으로이를 extern 함수로 정의합니다. 그러나 당신은 또한 그들을 정적으로 선언하고 있습니다.

C++ 태그가 주어지면 여기에서 가정을 할 것입니다. 이미 알고 계신다면 용서해주십시오. C의 static을 완전히 수행합니다.은 C++과 다릅니다. C++에서 static은 특정 메소드가 클래스의 인스턴스에 속하지 않으며 언제든지 누구든지 호출 할 수 있음을 의미합니다. C에서 static 키워드는 "이 함수는이 파일의 범위 내에서만 표시됩니다"를 의미합니다. 그래서 여러분이 정적 인 것을 선언 할 때, 여러분은 기본적으로 그 파일의 외부에있는 누구라도 그것을 사용하는 것을 금지합니다 (C의 등가물 private으로 생각하십시오).

그래서 의도가 아니라면 정적으로 선언하지 마십시오.

+0

아, 걱정 마세요. 나를 도와 주셔서 감사합니다. 당신이 말할 수 있듯이, 나는 이것 모두에 대해 전혀 새로운 것이고, 나는 시각 스튜디오 10 밖의 도구에 익숙해 지려고 노력하고있다. 나는 정적 인 것이 아니라 헤더 파일에 정적 인 것을 실제로 선언했다. – limenuke

관련 문제