我的问题是我一直遇到同样类型的错误,我无法理解为什么。我很确定我在主函数之前声明并定义了它。
这是我的代码。
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);
}
});
}
答案 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;
}
仔细看看,如果您有疑问,请告诉我。