2
我想创建一个设置C++类的包装,所以我可以在Python中使用它使用Cython。这是我到目前为止所尝试的。如何在命名空间中将C++类包含到Cython中?
cdef extern from "HilClass.h" namespace "acro":
cdef cppclass _HilClass "HilClass":
void start()
cdef class HilClass:
cdef _HilClass *ptr
cpdef start(self):
self.ptr.start()
那不能编译。我得到了下面的错误,现在我已经了解到一个可能的原因是它没有找到类。所以在检查后我已经正确地包含了头文件和源代码,我查看了由Cython生成的.cpp文件。我搜索了acro
,但无法找到它。代码中没有提及任何地方。
error C2143: syntax error: missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
... (more warning and errors related to HilClass)
这是当我决定改变第二行。
cdef cppclass _HilClass "acro::HilClass":
这确实编译。但是这并没有在我找到的任何示例/教程中完成。所以我的问题是,我错过了一些东西,并且我的'解决方法'能够可靠地工作。
注意:我不想在Python或Cython中创建此类的实例,我只是需要它来环绕HilClass指针。
编辑: 这是'HilClass.h'内的代码。 'acrophobe.h'有几个类的前向声明,枚举,typedef unint#_t ####
,并包含stdint。
#include "acrophobe.h"
namespace acro {
class HilClass
{
public:
HilClass(AcrophobeClass *acro_ptr);
~HilClass();
HILSocketClass *sck;
void start();
void acrophile_iteration(char dest, lbp::PortID_t PortID);
void set_activity_iteration_start(bool s);
// More of these set_activity functions
void set_activity_logging(bool s);
private:
AcrophobeClass *acro;
};
}
您的问题可能与* HilClass.h *中的代码有关,因此无法弄清楚问题所在。您可能需要在* HilClass.h *之前包含一些其他头文件来解决该问题。 –
我相信你的workround是可靠的。我不确定你原来的问题是由什么引起的。 – DavidW