首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >f1(const * str)与f1(char* str)在向C++应用SWIG时有何不同?

f1(const * str)与f1(char* str)在向C++应用SWIG时有何不同?
EN

Stack Overflow用户
提问于 2015-04-01 10:14:14
回答 1查看 88关注 0票数 1

我正在应用SWIG将C++库转换为Python。

我有一个头文件和一个源文件(省略了一些琐碎的内容):

test.h

代码语言:javascript
复制
void f1(char* str);

test.cc

代码语言:javascript
复制
void f1(const char* str) {
    /* do something */
}

当我构建它时,它不会抛出任何关于这种不匹配的错误或警告。

但是,当我导入Python中的SWIG生成的模块时:

代码语言:javascript
复制
>>> import (MYMODULE)
 ImportError: /usr/local/lib/libMYMODULE.so: undefined symbol: _ZN2f14str12iii

像上面这样的错误发生。

但是,在将头和源固定为具有相同参数之后,const char* str,已经解决了错误。

那么,我想知道的是,为什么C++编译器和构建器不抛出一个错误或一个警告,把这件事变成一个问题在SWIG和Python。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-01 11:07:17

事实上,char*const char*是不同的类型。

您已经声明了两个重载函数,并且只定义了一个。这不是一个错误,只要您不尝试调用或以其他方式使用未定义的错误。如果这样做,您将得到一个链接时错误;因为您已经构建了一个动态库,只有在加载库时才会检测到这个错误--在本例中,是由Python解释器检测的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29388143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档