문제

SWIG를 사용하여 매우 많은 수의 포장 C ++ 클래스가있는 LUA 모듈을 만들었습니다. 포장지는 문제없이 생성 및 컴파일됩니다 (-wall). 그러나 내가 찾은 몇 곳에서는 다음과 같은 문제가 발생합니다. 회원 데이터의 기본 할당이 실패합니다.

내가 달리면 :

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> require('myModule')
> a = myModule.ClassA()

그런 다음 "A"에 첨부 된 메타 테이블이 모든 멤버 데이터를 포함하고 있는지 확인할 수 있습니다 (이 경우 클래스 유형 Classb 및 Classc의 각각 클래스 유형 Classb 및 Classc의 필드 "B"및 "C").

나는 더 할 수있다 :

> a.b = myModule.ClassB()

B를 새로운 ClassB () 인스턴스에 성공적으로 재 할당합니다. 그러나 내가 할 때 :

> a.b.c = myModule.ClassC()

오류 메시지를받습니다.

Error in ClassB_c_set (arg 2), expected 'ClassC *' got 'ClassB *'

마치 '='의 오른쪽에있는 표현식은 재 할당 할 데이터 필드를 포함하는 요소와 동일한 유형의 객체 인 것처럼. 나는 단순한 것을 놓치고있을 것이라고 확신하지만, 나는 몇 시간 동안 벽에 머리를 두드려서 아무 소용이 없다.

아무도 생각이 있습니까? 감사!

도움이 되었습니까?

해결책

이것은 Swig의 버그라는 것이 밝혀졌습니다. 제출했습니다 문제의 원인을 설명하는 버그 보고서.

이 문제는 실제로 Nested Namespace 문제가 SWIG가 어떻게 작동하는지에 대한 오해와 결합 되었기 때문입니다. 인터페이스 파일에 포함 된 각 항목은 GCC가 #includs가 처리하는 방식으로 처리 될 것이라고 가정했습니다. 그러나 SWIG에서는 내용이 참조되는 순서대로 %포함되어야합니다.

설명은 링크 된 버그 보고서를 참조하십시오.

다른 팁

항상 매우 조심하십시오 과제 SWIG 사용! 주목하십시오 연산자 = () 기능은 기본 유형에만 사용됩니다. 자신의 객체를 할당 할 때마다 주소 만 복사됩니다.

이 게시물에 대해 자세히 알아보십시오. SWIG C ++ to Python : 경고 (362) : 연산자 = 무시

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top