1

An error was generated whenever I ran the following codes via the terminal. Here are my codes: 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

And finally, 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])

After running python setup.py install, I got the error error: unknown type name ‘class’ Why is it so?

Mark Tolonen
  • 166,664
  • 26
  • 169
  • 251
Ayush
  • 31
  • 3

1 Answers1

1

SWIG default compiles expecting C. Add swig_opts=['-c++'] as a parameter to Extension. After correcting other C++ errors, this is the setup.py that worked for me using Microsoft's compiler:

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])

Demo:

>>> import number
>>> n=number.Number(5)
>>> n.display()
Data is 5
>>> n.add(2)
>>> n.display()
Data is 7
Mark Tolonen
  • 166,664
  • 26
  • 169
  • 251