Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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
typedef不适用于SWIG(python包装C+;+;代码)_Python_C++_Swig - Fatal编程技术网

typedef不适用于SWIG(python包装C+;+;代码)

typedef不适用于SWIG(python包装C+;+;代码),python,c++,swig,Python,C++,Swig,您好,提前谢谢您的帮助 我正在编写一个Python包装器(Sigg 2 + Python 2.7),用于C++代码。C++代码中有我需要在Python包装器中访问的Type。不幸的是,我在执行Python代码时遇到以下错误: tag=CNInt32(0) NameError:未定义全局名称“CNInt32” 我查看了SWIG文档第5.3.5节,该节将大小解释为typedef,但我无法使其正常工作 以下是复制错误的简单代码: C++标题: \ifndef\uu示例\u H\uu #定义示例 /*

您好,提前谢谢您的帮助

我正在编写一个Python包装器(Sigg 2 + Python 2.7),用于C++代码。C++代码中有我需要在Python包装器中访问的Type。不幸的是,我在执行Python代码时遇到以下错误:

tag=CNInt32(0)
NameError:未定义全局名称“CNInt32”
我查看了SWIG文档第5.3.5节,该节将大小解释为typedef,但我无法使其正常工作

以下是复制错误的简单代码:

C++标题:
\ifndef\uu示例\u H\uu
#定义示例
/*文件:example.h*/
#包括
#如果已定义(API_导出)
#定义APIEXPORT\uuu declspec(dllexport)
#否则
#定义APIEXPORT\uuu declspec(dllimport)
#恩迪夫
typedef int CNInt32;
类APIEXPORT示例类{
公众:
示例类();
~ExampleClass();
无效打印函数(int值);
无效更新(CNInt32&var);
};
#endif/\示例\u H__
C++源程序:
/*文件:example.cpp*/
#包括“example.h”
#包括
使用名称空间std;
/*我是一个包含typedef变量用法的文件*/
ExampleClass::ExampleClass(){
}
ExampleClass::~ExampleClass(){
}
void ExampleClass::printFunction(int值){

我无法使它工作。我必须在接口文件中使用类型映射,请参见下面的:
-非常感谢Swig邮件列表中的“David Froger”。
-另外,感谢doctorlove提供的初步提示

%include typemaps.i
%apply CNInt32& INOUT { CNInt32& };
然后在python文件中:

var = 5                             # Note: old code problematic line: var = CNInt32(5)
print "Python value = ",var
var = exampleObj.updateInt (var)    # Note: 1. updated values returned automatically by wrapper function.
                                    #       2. Multiple pass by reference also work.
                                    #       3. It also works if your c++ function is returning some value.
print "Python Updated value var = ",var
再次感谢!

Santosh

这有帮助吗?(假设您在python代码中有正确的
import
)谢谢你的帮助。但是我的要求有点不同,因为我需要将CNInt32类型变量传递给包装的API并更新它的值。我怀疑你仍然需要在接口文件的正确位置放置正确的东西…但是我会让swig专家发表评论。我刚刚编辑了我的帖子,以便为swig专家显示我的完整接口文件。。。多亏了allI,我创建了一个简单的问题来重新生成错误:
var = 5                             # Note: old code problematic line: var = CNInt32(5)
print "Python value = ",var
var = exampleObj.updateInt (var)    # Note: 1. updated values returned automatically by wrapper function.
                                    #       2. Multiple pass by reference also work.
                                    #       3. It also works if your c++ function is returning some value.
print "Python Updated value var = ",var