Python错误:没有构造函数C++模板COD生成模块的定义

2024-04-27 23:15:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在C++中生成一个通用堆栈,然后尝试构建它的一个模块,并使用SWIG将其扩展到Python。
为此,模板化的_stack.h中的代码如下所示

#include <string>
template <typename T>
class mNode {
public:
    T data;
    mNode* next;
    /* mNode() { } */
    mNode(T d) { 
        data = d;
        next = NULL;
    }

};
template <typename T>
class mStack {
    mNode<T> *topOfStack;
    mStack();   
    void push(T data);
    T pop();
};

template <class T> mStack<T>::mStack() {
    topOfStack = NULL;
}

template <class T> void mStack<T>::push(T data) {
    mNode<T>* newNode = new mNode<T>(data);
    newNode->next = topOfStack;
    topOfStack = newNode;
}

template <class T> T mStack<T>::pop(void) {
    mNode<T>* tempTop = topOfStack;
    T dataToBePopped = tempTop->data;
    topOfStack = topOfStack->next;
    delete tempTop;
    return dataToBePopped;
}

我编写的接口文件是模板化的_stack

^{pr2}$

我正在按照脚本编译和构建模块编译脚本.sh有以下代码

swig -c++ -python -o templated_stack_wrap.cpp templated_stack.i
g++ -c -fPIC templated_stack_wrap.cpp -I/usr/include/python2.7
g++ -shared -o _TemplatedStack.so templated_stack_wrap.o

模块已经成功构建,并且导入时没有任何错误,但是当我尝试创建IntStack的对象时,如下所示

from TemplatedStack import IntStack
t = IntStack()

我有以下错误

in __init__(self, *args, **kwargs)
     75     __swig_getmethods__ = {}
     76     __getattr__ = lambda self, name: _swig_getattr(self, IntStack, name)
---> 77     def __init__(self, *args, **kwargs): raise AttributeError("No constructor defined")
     78     __repr__ = _swig_repr
     79     __swig_destroy__ = _TemplatedStack.delete_IntStack

AttributeError: No constructor defined

如有任何关于上述错误的帮助,我们将不胜感激
提前谢谢 存储库的github链接是this


Tags: 模块selfdatastacktemplatetemplatedclassnext