【问题标题】:Dereferencing pointer to incomplete type error for struct member access in Python swig C wrapper取消引用指向 Python swig C 包装器中结构成员访问的不完整类型错误的指针
【发布时间】:2015-06-18 07:34:29
【问题描述】:

在 GCC 4.8.2 下编译 swig Python wrapper 时出现什么错误?

wfdb_python_wrap.c:3967:11: error: dereferencing pointer to incomplete type
if (arg1->fname) free((char*)arg1->fname);
       ^
wfdb_python_wrap.c:3967:36: error: dereferencing pointer to incomplete type
if (arg1->fname) free((char*)arg1->fname);

源代码来自wfdb_python_wrap.c:

...
#include <wfdb/wfdb.h>
...

#ifdef __cplusplus
extern "C" {
#endif
SWIGINTERN PyObject *_wrap_WFDB_Siginfo_fname_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
...                                 
struct WFDB_Siginfo *arg1 = (struct WFDB_Siginfo *) 0 ;
...
if (arg1->fname) free((char*)arg1->fname);
...

头文件/usr/local/include/wfdb/wfdb.h:

...
struct WFDB_siginfo {   /* signal information structure */
    char *fname;    /* filename of signal file */
    ...
};
...

【问题讨论】:

  • 非常奇怪的代码,但我猜那是 SWIG 与古代编译器兼容,或者其他什么。我的建议是阅读 wfdb_python_wrap.c 的预处理版本。也许struct 声明被预处理器魔法或其他东西隐藏了。

标签: python c gcc compiler-errors swig


【解决方案1】:

你声明这个类型:

struct WFDB_siginfo 

并使用这个:

struct WFDB_Siginfo

这是不同的(注意大写的 S),所以 gcc 确实认为 struct WFDB_Siginfo 是另一种尚未声明的类型。

【讨论】:

  • 我相信这是 swig 生成的文件,让我检查一下
  • 还有这些声明:static swig_type_info _swigt__p_WFDB_Siginfo = {"_p_WFDB_Siginfo", "struct WFDB_Siginfo *|WFDB_Siginfo *", 0, 0, (void*)0, 0};
  • 所以你的标题可能来自另一个 swig 版本?
  • static swig_type_info *swig_type_initial[] = { ... &amp;_swigt__p_WFDB_Siginfo, ...
  • wfdb.h 来自 C 库,wfdb_python_wrap.c 是 Swig 生成的,我猜
猜你喜欢
  • 2014-05-09
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2014-07-06
  • 2013-12-22
  • 2011-07-13
  • 2018-05-31
  • 2017-11-02
相关资源
最近更新 更多