【问题标题】:SWIG cannot convert typedef type correctSWIG 无法正确转换 typedef 类型
【发布时间】:2013-05-23 13:34:06
【问题描述】:

我正在使用 SWIT 将 vc 项目转换为 python。 我发现当结构具有类型为“typedef char TEXT [16]”的成员时无法正确转换。 例如:

typedef char TEXT[16];
struct MYSTRUCT
{       
    TEXT    TradingDay;     
};

包装器 cpp 无法正常编译。 “错误 C2075:‘运算符 new() 的目标’:数组初始化需要大括号” 但是,如果 typedef 不是数组,像这样:

    typedef int NUMBER;
    struct MYSTRUCT2
{       
    NUMBER Money;       
};

一切都会好的。 我该怎么办? 谢谢!

附注: 我的文件:

%module MyDataAPI
%include "typemaps.i"

%header %{
#include "../References/MyDataAPI.h"

%}

namespace MyDataAPI
{
     struct MYSTRUCT
    {       
        TEXT    TradingDay;     
    };
    struct MYSTRUCT2
    {       
        NUMBER Money;       
    };
}

【问题讨论】:

    标签: c++ python arrays typedef swig


    【解决方案1】:

    确保您的 typedef 语句由 SWIG 处理。 %header 仅将代码添加到生成的文件中,SWIG 不处理该数据。 %inline 都将代码直接添加到生成的文件中 使用 SWIG 处理它。这是我的.i 文件:

    %module x
    
    %inline %{
        typedef char TEXT[16];
        typedef int NUMBER;
        namespace MyDataAPI
        {
            struct MYSTRUCT
            {
                TEXT TradingDay;
            };
            struct MYSTRUCT2
            {
                NUMBER Money;
            };
        }
    %}
    

    并使用:

    T:\>py
    Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import x
    >>> a=x.MYSTRUCT()
    >>> a.TradingDay
    ''
    >>> a.TradingDay='ABCDEFGHIJKLMNOPQ'   # Note this is too long, 17 chars...
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: in method 'MYSTRUCT_TradingDay_set', argument 2 of type 'char [16]'
    >>> a.TradingDay='ABCDEFGHIJKLMNOP'
    >>> a.TradingDay
    'ABCDEFGHIJKLMNOP'
    >>> b=x.MYSTRUCT2()
    >>> b.Money
    0
    >>> b.Money=100
    >>> b.Money
    100
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-25
      • 2010-11-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多