【问题标题】:error: unknown type name ‘class’ using SWIG错误:使用 SWIG 的未知类型名称“类”
【发布时间】:2018-02-05 23:37:55
【问题描述】:

每当我通过终端运行以下代码时都会产生错误。 这是我的代码: 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;
}

数字.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’为什么会这样?

【问题讨论】:

  • 这一部分是C?
  • @Yunosch 对不起。

标签: python c++ api swig


【解决方案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

【讨论】:

    猜你喜欢
    • 2012-02-20
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2013-10-12
    相关资源
    最近更新 更多