我在文件中有下一个定义:
文件:one.h
typedef struct example example;
在其他文件中我有结构的实现:
文件:two.h
typedef struct example1{
int four;
} example1;
struct example {
int one;
example1 four;
};
档案:swig.i
¿?
File wrapper.java
class SWIGTYPE_P_example;
// I want to have: class example;
编译时,swig生成类SWIGTYPE_p_example
,而不是对象
示例
我理解我的struct的声明是未知的,这就是原因,因为我有SWIGTYPE,但是,有没有办法让包装器中有正确的类?
答案 0 :(得分:0)
假设您的接口文件类似于:
%module test
// Forward declare, SWIG knows nothing more:
struct example;
typedef struct example example;
void foo(example *ex);
example *bar();
(或者可能使用%include
指令引入头文件)然后你可以通过简单的添加来使SWIG做更多的事情:
struct example {};
在您的界面文件中第一次提到示例之前。这足以使SWIG将其视为不仅仅是一个指针。提供您关心的struct
(或C ++中的class
)部分的SWIG部分定义 1 是完全合理的 - 在这种情况下它听起来像你关心的struct example
的真实定义中没有任何内容。
1 C ++类型存在一些抽象或没有默认构造函数的问题。
答案 1 :(得分:-1)
解决方案是在我的swig.i文件中重新定义我的typedef
档案:swig.i
typedef struct example1 { int四; }