错误:使用SWIG的未知类型名称“class”

时间:2017-08-28 16:21:49

标签: python c++ api swig

每当我通过终端运行以下代码时都会生成错误。 这是我的代码: number.h:

class Number{
public:
    Number(int start);
    void add(int x);
    void sub(int x);
    void display();
    int data;
};

number.cxx:

#include <iostream>
#include "number.h"

using namespace std;
Number::Number(int start){
    data=start;
}
void Number::add(int x){
    data=data+x;
}
void Number::sub(int x){
    data=data-x;
}
void Number::display(){
    cout<<"Data is "<<data<<endl;
}

number.i:

%module number
%{
#include "number.h"
%}

%include number.h

最后,setup.py:

from distutils.core import setup, Extension

name="number"
version="1.0"

ext_modules=Extension(name="_number",sources=["number.i","number.cxx"])

setup(name=name,
    version=version,
    ext_modules=[ext_modules])

运行python setup.py install后,我收到了错误消息  error: unknown type name ‘class’为什么会这样?

1 个答案:

答案 0 :(得分:1)

SWIG默认编译期望C.将swig_opts=['-c++']作为参数添加到Extension。在纠正其他C ++错误之后,这是使用Microsoft编译器为我工作的setup.py:

from distutils.core import setup, Extension

name="number"
version="1.0"

ext_modules=Extension(name="_number",
                      sources=["number.i","number.cxx"],
                      swig_opts=['-c++'],
                      extra_compile_args=['/EHsc'])

setup(name=name,
      version=version,
      ext_modules=[ext_modules])

演示:

>>> import number
>>> n=number.Number(5)
>>> n.display()
Data is 5
>>> n.add(2)
>>> n.display()
Data is 7