Edge
,有一个友元比较(==)运算符。我很难在包装器python代码中实现比较特性。在简洁的Edge
标题是:
class Edge {
private:
int p1, p2;
public:
Edge(const int pp1, const int pp2);
~Edge(){};
friend bool operator==(const Edge &e1, const Edge &e2);
};
我编写的python包装器是:
^{pr2}$>,EdgEnEngor和CuffReSead是C++例程,定义为:
#include "Edge.hpp"
extern "C" {
Edge* Edge_new(const Int32 pp1, const Int32 pp2) { return new Edge(pp1, pp2); }
bool compare_edge(Edge *e1, Edge *e2) {
return *e1 == *e2;
}
}
建造师工作得很好。当我比较两个边缘对象e1 == e2
时,我得到以下类型错误:
Traceback (most recent call last): File "Edge.py", line 21, in <module>
print e1 == e2 File "Edge.py", line 16, in __eq__
return lib.compare_edge(self.obj, c_void_p(other)) TypeError: cannot be converted to pointer
我确实理解错误的含义,以及最可能的出错原因,但我不知道如何修复它。我用GCC 4.7编译C++代码,Python解释器是64位。在
问题是,您试图将Python对象强制转换为
void *
,而不是已经附加到该对象的obj
属性的void *
。在就像改变一样简单。。。在
…到。。。在
^{pr2}$显式调用
c_void_p
应该是不必要的,因为您已经在行中声明了类型。。。在相关问题 更多 >
编程相关推荐