gpt4 book ai didi

c++ - 类型错误 : unable to acces a wrapped function with double pointer argument

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:46 25 4
gpt4 key购买 nike

我是 swig 的新手,当我访问一个带有双指针作为参数的函数时遇到了一个奇怪的 TypeError。

这是我的文件:

例子.hpp

#ifndef _EXAMPLE_HPP
#define _EXAMPLE_HPP

class Example {
public:
void test_cc(char * c0, char * c1);
void test_cd(char * c0, double d0);
void test_cdp(char * c0, double * d0);
};

#endif // _EXAMPLE_HPP

例子.cpp

#include "Example.hpp"

void Example::test_cc(char * c0, char * c1) {}
void Example::test_cd(char * c0, double d0) {}
void Example::test_cdp(char * c0, double * d0) {}

例子.i

%module Example
%{
#include "Example.hpp"
%}

#include "Example.hpp"

最后是我的测试文件 test_Example.py:

#!/usr/bin/env python

import Example

E = Example.Example()

E.test_cc("Hello","World");
E.test_cd("Hello",42);
E.test_cdp("Hello",42);

当我运行 ./test_Example.py 时,我收到错误消息

Traceback (most recent call last):
File "./test_Example.py", line 9, in <module>
E.test_cdp("Hello",42);
File "Example.py", line 77, in test_cdp
def test_cdp(self, *args): return _Example.Example_test_cdp(self, *args)
TypeError: in method 'Example_test_cdp', argument 3 of type 'double *'

访问函数 test_cc 有效,test_cd 也...为什么不能 test_cdp?

我的错误在哪里?

最佳答案

我认为你的问题其实在于:

void test_cd(char * c0, double * d0);

并且您的参数应该是 double,而不是 double*

引用您的评论

您的代码是:

E.test_cc("Hello","World");
E.test_cd("Hello",42);

你的原型(prototype)是:

void test_cc(char * c0, char * c1);
void test_cd(char * c0, double d0);

“Hello”和“World”是衰减为类型 const char* 的字符串文字。所以,它们是指针。当您在 test_cc 中传递 c0 和 c1 时,它很好,因为它需要一个指针。

虽然 c0 是 test_cd 中的指针,但 d0 不是 - d0 是 double 类型,不是指向 double 的指针。因此,您必须传入一个指向 double 的指针。

您可以通过在堆栈上创建一个 double 并传入其地址来完成此操作:

double hi_mom = 83.2;
test_cd("some string" &hi_mom);

或者通过声明一个指针并使其指向一个堆栈变量,将其传入:

double hi_mom = 83.2;
double* ptr = &hi_mom;
test_cd("some string", ptr);

或者通过声明一个指向动态内存的指针并将其传入:

double* ptr = new double(83.2);
test_cd("some string", ptr);
delete ptr;

如果可以的话,我会避免第三个。

再次编辑...

http://www.dalkescientific.com/writings/NBN/c_extensions.html

显示了如何从 python 调用 C 代码(包括传递 double 值)的工作示例。在 python 和 C 代码中搜索 iterate_point 以查看其工作原理。你不应该有一个 double 指针,它应该只是一个普通的 double ,如前所述。

关于c++ - 类型错误 : unable to acces a wrapped function with double pointer argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com