SWIGTYPE在实现之前声明typedef

时间:2012-01-12 20:23:26

标签: java java-native-interface swig

我在文件中有下一个定义:

文件: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,但是,有没有办法让包装器中有正确的类?

2 个答案:

答案 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四; }