编译器中的冲突类型错误

时间:2017-05-01 05:46:49

标签: c

我的问题是我一直遇到同样类型的错误,我无法理解为什么。我很确定我在主函数之前声明并定义了它。

这是我的代码。

function getSubMenu(mainItem, cb) {
  var subMenuMarkup = "";
  var innerSubMenuMarkup = "";

  if (!(mainItem.hasSubMenu == "Yes")) {
    subMenuMarkup = "<li class='yamm-fw borderLeftY'><a href='" + mainItem.Link + "' title='' class='dropdown-toggle' role='link' aria-haspopup='true' aria-expanded='false'>" + Res[mainItem.Title] + "</a></li>";
    cb(subMenuMarkup);
    return;
  }


  var url = "/_api/lists/getbytitle('GlobalSubNavMenu')/items?$select=Id,Title,Link,ParentMenu/Id,root&$filter=ParentMenu/Id eq " + mainItem.Id + "&$expand=ParentMenu/Id";

  $.ajax({
    url: url,
    method: "GET",
    headers: {
      "Accept": "application/json; odata=verbose"
    },
    success: function(data) {
      if (data.d.results.length < 6)
        innerSubMenuMarkup += "<ul class='dropdown-menu width500 spaceLeft'>"; //
      else
        innerSubMenuMarkup += "<ul class='dropdown-menu width800 spaceLeft'>";

      innerSubMenuMarkup += "<li><div class='yamm-content'><div class='row'><dl class='col-sm-3 mega-menu colborderRight'>";

      $.each(data.d.results, function(i, item) {
        if (i !== 0 && i % 6 == 0)
          innerSubMenuMarkup += "</dl><dl class='col-sm-3 mega-menu colborderRight'><dd class=''><a href=/" + (item.root ? "" : lang) + item.Link + ">" + Res[item.Title] + "</a></dd>";
        else
          innerSubMenuMarkup += "<dd class=''><a href=/" + (item.root ? "" : lang) + item.Link + ">" + Res[item.Title] + "</a></dd>";
      });

      subMenuMarkup += "<li class='dropdown yamm-fw borderLeftY'><a href='#' title='' class='dropdown-toggle' data-toggle='dropdown' role='button' aria-haspopup='true' aria-expanded='false'>" + Res[item.Title] + "<b class='caret'></b></a>";
      subMenuMarkup += innerSubMenuMarkup + "</dl>";
      subMenuMarkup += "<dl class=''><dd class='picHolder'><img alt='' src='/PublishingImages/" + item.Image + "'/></dd></dl></div></div></li></ul></li>";
      cb(subMenuMarkup);
    }
  });
}

2 个答案:

答案 0 :(得分:1)

在声明和定义中返回functn()不同的类型。所以,使用

int functn(int x);

而不是

int functn(int x, int result)

从函数参数中删除int result并声明内部函数。等,

int functn(int x)
{
    int result = 0;
    result = (x-1)+2;
    if (x <= 0){
        return 0;
    }
    else{
        return result;
    }
}

另外,正确的函数调用,如

y = functn(x);

而不是

 y = f(x);

答案 1 :(得分:1)

functn中存在许多问题。主要通过result。当您将结果传递给functn时,functn会收到result副本,获取修改后价值的唯一方法是返回修改后的值。您还可以将指针传递给result并更新*result中的functn(类似于您现在所做的那样),这将消除返回值的需要,因为对{{ 1}}将在调用函数中显示(result此处)。此外,不需要全局变量。只需将变量声明为main()的本地变量,并根据需要作为参数传递。

以下示例声明main(下面只是functn)来执行两者,将指针指向f(例如result)as一个参数,同时还返回&result,它允许您分配或不分配回报,但始终在result中更新result的值,例如

main

示例使用/输出

#include <stdio.h>

int f (int x, int *result);

int main (void){

    int x, y, result = 0;
    printf ("Enter the value of x: ");
    if (scanf ("%d", &x) != 1) {
        fprintf (stderr, "error scanf, invalid conversion.\n");
        return 1;
    }

    y = f (x, &result);
    printf ("y = f(%d) => %d\n", x, y);

    return 0;
}

int f (int x, int *result) 
{
    *result = (x-1)+2;

    if (x <= 0)
        return 0;

    return *result;
}

仔细看看,如果您有疑问,请告诉我。