如何解决警告“警告401:关于基类'xxxx'的信息被忽略”。痛饮

时间:2019-11-14 17:24:41

标签: python c++ swig

我正在尝试使用swig从python调用c ++函数。它实际上可以正常工作(我可以在python中导入模块),但是在以后遇到麻烦之前,我想解决一些警告。

我试图只包含产生警告的代码。

我的MDF4.h头文件中有此类:

// MDF4.h
.
.
.
typedef struct
{
  // Block Header
  enum { RID=M4ID_FH };
  // enumeration of links
  enum
  {
    fh_fh_next, // Link to next FHBLOCK (can be NIL if list finished)
    fh_md_comment, 
    LinkMax       // # of known links
  };
  // Data members
  M_DATE   fh_time;
  M_UINT8  fh_reserved[3]; // Reserved
} m4FHRecord;

.
.

template<class R,class T=BYTE,int ID=R::RID> class m4BlockImpl : public m4Block,public R
{
public:
  m4BlockImpl(size_t nVar=0) : m4Block(R::LinkMax),m_var(nVar)
  {
    m_Hdr.hdr_hdr=M4ID_ID;
    m_Hdr.hdr_id=ID;
    R *pThis=static_cast<R *>(this);
    memset(pThis,0,sizeof(R));
  }
  BOOL setCommentBlk(m4Block &TXorMD,int linkNo)
  {
    // cannot call twice
    if (!hasLink(linkNo))
    {
      ATLASSERT(TXorMD.hdrID()==M4ID_TX || TXorMD.hdrID()==M4ID_MD);
      ATLASSERT(m_File);
      M_LINK mdAt=TXorMD.Create(m_File,3);
      if (mdAt)
      {
        setLink(linkNo,mdAt);
        return TRUE;
      }
    }
    return FALSE;
  }
};

.
.

class M4FHBlock : public m4BlockImpl<m4FHRecord>
{
public:
  M4FHBlock(MDF4File *File);     // ctor: create and insrt current time
  M4FHBlock();                   // used for reading

  BOOL setComment(m4Block &md);  // CANNOT be a TX Block!
  DECLARE_DUMP
};

这是我的MDF4.i接口文件:

%module MDF4

%{
#include "mdf4_lib_v2_019\\stdafx.h"
#include "mdf4_lib_v2_019\\utf8.h"
#include "mdf4_lib_v2_019\\Resource.h"
#include "mdf4_lib_v2_019\\mdfConfig.h"
#include "mdf4_lib_v2_019\\Ptrlist.h"
#include "mdf4_lib_v2_019\\dynArray.h"
#include "mdf4_lib_v2_019\\miniz.c"
#include "mdf4_lib_v2_019\\md5.h"
#include "mdf4_lib_v2_019\\m4Dump.h"
#include "mdf4_lib_v2_019\\mdFile.h"
#include "mdf4_lib_v2_019\\mdfTypes.h"
#include "mdf4_lib_v2_019\\mdf4.h"

%}

%feature("autodoc", "1");
%feature("flatnested");

%rename(__incr__)   Indent::operator++;
%rename(__incr__)   ptrlist::iterator::operator++;
%rename(__eq__)     ptrlist::iterator::operator=;
%rename(__decr__)   ptrlist::iterator::operator--;
%rename(__eq__)     ptrlist::iterator::operator=;
%rename(__invert__) ptrlist::iterator::operator!;
%rename(__incr__)   DbtObjPtrList::iterator::operator++;
%rename(__eq__)     DbtObjPtrList::iterator::operator=;
%rename(__decr__)   DbtObjPtrList::iterator::operator--;
%rename(__eq__)     DbtObjPtrList::iterator::operator=;
%rename(__invert__) DbtObjPtrList::iterator::operator!;

%include <wchar.i>
%include <cwstring.i> 
%include <std_vector.i>
%include <std_map.i>

%include "mdf4_lib_v2_019\\stdafx.h"
%include "mdf4_lib_v2_019\\utf8.h"
%include "mdf4_lib_v2_019\\Resource.h"
%include "mdf4_lib_v2_019\\mdfConfig.h"
%include "mdf4_lib_v2_019\\Ptrlist.h"
%include "mdf4_lib_v2_019\\dynArray.h"
%include "mdf4_lib_v2_019\\miniz.c"
%include "mdf4_lib_v2_019\\md5.h"
%include "mdf4_lib_v2_019\\m4Dump.h"
%include "mdf4_lib_v2_019\\mdFile.h"
%include "mdf4_lib_v2_019\\mdfTypes.h"
%include "mdf4_lib_v2_019\\mdf4.h"

但是在调用 swig -c ++ -python MDF4.i 之后,我总是收到此警告:

mdf4_lib_v2_019\mdf4.h(1226) : Warning 401: Nothing known about base class 'm4BlockImpl< m4FHRecord >'. Ignored.
mdf4_lib_v2_019\mdf4.h(1226) : Warning 401: Maybe you forgot to instantiate 'm4BlockImpl< m4FHRecord >' using %template.



---- 编辑 ----- 我创建了一个具有相同警告输出的简单示例:
test.h:

typedef struct
{
  enum { RID=1}; 
}myStruct;


template<class A,class B=BYTE,int ID=A::RID> class Foo : public A
{
  int a;

public:
  Foo()
  {
    int a = 1;
  }
};


class Bar : public Foo<myStruct>
{
public:
  Bar(); 
};

test.i:

%module test

%{

#include "test.h"

%}

%include "test.h"


0 个答案:

没有答案