每当我通过终端运行以下代码时都会生成错误。 这是我的代码: 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’
为什么会这样?
答案 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