首页 > 解决方案 > 传递结构时丢弃限定符

问题描述

我遇到了我无法弄清楚的“丢弃限定符”案例之一。在我尝试摆脱警告之前,我的代码可以凭经验起作用。这是错误:

filter.c:28:21: warning: passing 'const filterentry [1]' to parameter of type
  'struct filter_matchbuffer *' discards qualifiers
  [-Wincompatible-pointer-types-discards-qualifiers]
filterServiceBuffer(filterinparsermap);
                ^~~~~~~~~~~~~~~~~

在下面的代码中,我有一系列文本字符串过滤器,它们是与函数配对的文本。例如,当我看到“$GPRIP”字符串时,它会复制消息。无论如何,在 filterinparsermap[] 中有整个系列的这些对。

#define FILTER_COPY 3
enum
{
    FILTERFUNCTION_COPY = FILTER_COPY,
#define FILTERFUNCTION_COPY FILTERFUNCTION_COPY
};

struct filter_matchbuffer
{
    int indexofstring;
    int filterbehavior;
    const char *const strforcomparison;
};
typedef struct filter_matchbuffer filterentry;
#define FILTERTEXTENTRY(num, behavior, x) \
    {                                     \
        num, behavior, #x \
    }

const filterentry filterinparsermap[] = {
      FILTERTEXTENTRY(1, FILTER_COPY, "$GPRIP")};

void filterServiceBuffer(struct filter_matchbuffer p_filtermap[])
{
}

int main(){
filterServiceBuffer(filterinparsermap);
return(0);
}

我真的很想摆脱这个错误,但我似乎无法让我的结构和指针类型同意并且仍然可以编译代码。任何建议将不胜感激。

标签: cpointers

解决方案


摆脱错误(“丢弃限定符”)

编辑函数签名以接受指向const数据的指针。

// void filterServiceBuffer(struct filter_matchbuffer p_filtermap[])
void filterServiceBuffer(const struct filter_matchbuffer p_filtermap[])

推荐阅读