我试图从Python调用C ++函数。这里是python端的代码:
from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')
class Foo(object):
def __init__(self):
self.obj = lib.Foo_new()
def bar(self):
lib.Foo_bar(self.obj)
def max(self,num1,num2):
lib.Foo_max(self.obj)
f = Foo()
f.bar()
f.max(3,5)
哪个属性错误为:
Hello
Traceback (most recent call last):
File "Linkcpp.py", line 16, in <module>
f.max(3,5)
AttributeError: 'Foo' object has no attribute 'max'
请告知上述代码中的更正内容。
我的c ++代码是foo.cpp:
#include <iostream>
class Foo{
public:
void bar(){
std::cout << "Hello" << std::endl;
}
int max(int num1,int num2)
{
// local variable declaration
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
};
extern "C" {
int num1;
int num2;
Foo* Foo_new(){ return new Foo(); }
void Foo_bar(Foo* foo){ foo->bar(); }
int Foo_max(Foo* foo){ return foo->max(num1,num2); }
}
我正在通过以下命令编译C ++代码:
g ++ -c -fPIC foo.cpp -o foo.o
g ++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
答案 0 :(得分:3)
您混合了标签和空格。您的Foo
类似乎有max
方法,但事实上,由于您的混合制表符和空格,max
的定义实际上嵌套在bar
的定义中}。
开启&#34;显示空白&#34;在你的编辑器中,你可以在下次看到这个。如果Python检测到您正在混合制表符和空格,那么使用-tt
命令行标志运行Python将为您提供错误消息,这也有帮助。