Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cython发行';布尔';不是类型标识符_Python_C++_Cython - Fatal编程技术网

Python cython发行';布尔';不是类型标识符

Python cython发行';布尔';不是类型标识符,python,c++,cython,Python,C++,Cython,我拼命地试图将std::vector类成员公开给Python类 这是我的C++类: class Test { public: std::vector<bool> test_fail; std::vector<double> test_ok; }; 我得到的错误是: Error compiling Cython file: ------------------------------------------------------------ ...

我拼命地试图将
std::vector
类成员公开给Python类

这是我的C++类:

class Test
{
  public:
    std::vector<bool> test_fail;
    std::vector<double> test_ok;
};
我得到的错误是:

Error compiling Cython file:
------------------------------------------------------------
...




cdef extern from *:
    ctypedef bool X 'bool'
            ^
------------------------------------------------------------

vector.from_py:37:13: 'bool' is not a type identifier
我正在使用python 2.7.6和Cython 0.20.2(也尝试了0.20.1)

我也尝试了属性,但也不起作用


附录:我的pyx文件顶部有libcpp cimport bool的
,还有向量导入


怎么了??我相信这可能是一个错误。有人知道如何避开这一点吗?谢谢。

你需要做一些额外的C++支持。在.pyx文件的顶部,添加

from libcpp cimport bool

我想看看里面,找到你可能需要的其他东西,比如std::string和STL容器

为了在cython中定义
布尔对象,它们需要定义为
bint
。根据:boolean int对象的bint被编译成c int,但是被强制作为boolean从Cython到Cython

例如:

cdef bint boolean_variable = True

来源:

我找到了一个有效的解决方法,尽管它可能不是最佳的

我已经用python列表替换了
pytest
类的成员类型

转换现在隐式完成,如文档中所述:

所有转换都会创建一个新容器并将数据复制到其中。容器中的项自动转换为相应类型,其中包括递归地转换容器内的容器,例如字符串的C++向量。 现在,我的班级看起来是这样的:

cdef class pyTest:
     cdef Test* thisptr
     cdef public list test_fail #now ok
     cdef public list test_ok

     cdef __cinit__(self):
         self.thisptr = new Test()
         self.test_fail = self.thisptr.test_fail # implicit copy & conversion
         self.test_ok = self.thisptr.test_ok # implicit copy and conversion

     cdef __dealloc__(self):
         del self.thisptr

似乎无法编辑我的答案:从libcpp.vector cimport vector添加
,对于vector关键字Hello,我忘了提到我的pyx文件顶部有
cimport bool
:(我想我看错了。它似乎在抱怨
'bool'
typedef。在我看来这是不必要的。如果你已经导入了bool,你可以从libcpp cimport bool中将任何带有
cdef bool x
的bool变量声明为bool\t
将更好地解决与Python bool的命名冲突。Cython wiki在这方面非常有用。)g本问题:
cdef class pyTest:
     cdef Test* thisptr
     cdef public list test_fail #now ok
     cdef public list test_ok

     cdef __cinit__(self):
         self.thisptr = new Test()
         self.test_fail = self.thisptr.test_fail # implicit copy & conversion
         self.test_ok = self.thisptr.test_ok # implicit copy and conversion

     cdef __dealloc__(self):
         del self.thisptr