如何修复“'Function' 不命名类型”? [阿杜伊诺]
How to fix " 'Function' does not name a type "? [Arduino]
我正在为我的一个 Arduino 项目制作一种脚本语言,我需要来自 python 的 eval 函数。所以我花了很长时间编写一个代码,我想我终于做到了,但是有一个问题,它不会工作,因为我收到错误“'evals' 没有命名类型。”,即使我定义了它在草图的前面。
我已经尝试更改有关结构的所有内容,但没有任何效果。 (例如,我尝试移动 char 变量的 * 符号,我尝试更改间距,在结构之后删除和添加“;”,在之前添加和删除 typedef 等。)
struct evals {
char *pointer;
bool boolout;
char *charout;
int intout;
float floatout;
};
evals eval(String input) {
evals output;
String inputs = input;
char input2[inputs.length() + 1];
inputs.toCharArray(input2, inputs.length());
if (input[0] == '"' and input[-1] == '"') {
inputs.remove(0, 1);
inputs.remove(-1, 1);
output.pointer = "charout";
char input2[inputs.length() + 1];
inputs.toCharArray(input2, inputs.length());
output.charout = input2;
return output;
} else if (input == "true") {
output.pointer = "boolout";
output.boolout = true;
return output;
} else if (input == "false") {
output.pointer = "boolout";
output.boolout = false;
return output;
} else {
String inputss = inputs;
inputss.replace("0", "");
inputss.replace("1", "");
inputss.replace("2", "");
inputss.replace("3", "");
inputss.replace("4", "");
inputss.replace("5", "");
inputss.replace("6", "");
inputss.replace("7", "");
inputss.replace("8", "");
inputss.replace("9", "");
if (inputss.length() == 0) {
output.pointer = "intout";
output.intout = inputs.toInt();
return output;
} else {
if (inputss[0] == "." and inputss.length() == 0) {
output.pointer = "floatout";
output.floatout = inputs.toFloat();
return output;
} else {
for (int Variable = 0; Variable < 50; Variable++) {
if (LocalVariables[Variable] == "") {
break;
} else {
output.pointer = "variableout";
output.intout = Variable;
return output;
}
}
}
}
}
}
我希望它成为 return 类型 "evals" 的变量,但它只是给出了那个错误。
您必须使用 struct evals
而不是 evals
作为类型,除非您指定如下内容:
typedef struct evals evals;
(这将类型 evals
设置为等于类型 struct evals
)
请参阅 this question 的答案,以正确解释为什么需要这样做(TL;DR 这是 c 的遗留问题,如果您是该语言的新手,则意义不大) .
我正在为我的一个 Arduino 项目制作一种脚本语言,我需要来自 python 的 eval 函数。所以我花了很长时间编写一个代码,我想我终于做到了,但是有一个问题,它不会工作,因为我收到错误“'evals' 没有命名类型。”,即使我定义了它在草图的前面。
我已经尝试更改有关结构的所有内容,但没有任何效果。 (例如,我尝试移动 char 变量的 * 符号,我尝试更改间距,在结构之后删除和添加“;”,在之前添加和删除 typedef 等。)
struct evals {
char *pointer;
bool boolout;
char *charout;
int intout;
float floatout;
};
evals eval(String input) {
evals output;
String inputs = input;
char input2[inputs.length() + 1];
inputs.toCharArray(input2, inputs.length());
if (input[0] == '"' and input[-1] == '"') {
inputs.remove(0, 1);
inputs.remove(-1, 1);
output.pointer = "charout";
char input2[inputs.length() + 1];
inputs.toCharArray(input2, inputs.length());
output.charout = input2;
return output;
} else if (input == "true") {
output.pointer = "boolout";
output.boolout = true;
return output;
} else if (input == "false") {
output.pointer = "boolout";
output.boolout = false;
return output;
} else {
String inputss = inputs;
inputss.replace("0", "");
inputss.replace("1", "");
inputss.replace("2", "");
inputss.replace("3", "");
inputss.replace("4", "");
inputss.replace("5", "");
inputss.replace("6", "");
inputss.replace("7", "");
inputss.replace("8", "");
inputss.replace("9", "");
if (inputss.length() == 0) {
output.pointer = "intout";
output.intout = inputs.toInt();
return output;
} else {
if (inputss[0] == "." and inputss.length() == 0) {
output.pointer = "floatout";
output.floatout = inputs.toFloat();
return output;
} else {
for (int Variable = 0; Variable < 50; Variable++) {
if (LocalVariables[Variable] == "") {
break;
} else {
output.pointer = "variableout";
output.intout = Variable;
return output;
}
}
}
}
}
}
我希望它成为 return 类型 "evals" 的变量,但它只是给出了那个错误。
您必须使用 struct evals
而不是 evals
作为类型,除非您指定如下内容:
typedef struct evals evals;
(这将类型 evals
设置为等于类型 struct evals
)
请参阅 this question 的答案,以正确解释为什么需要这样做(TL;DR 这是 c 的遗留问题,如果您是该语言的新手,则意义不大) .