在以下代码中,avr-g ++(Arduino IDE)编译器抛出错误:'ControllerPosition' does not name a type
。代码有什么问题?
struct ControllerPosition
{
int y, x;
ControllerPosition(int _y = 0x7FFF, int _x = 0x7FFF) : y(_y), x(_x) {}
};
ControllerPosition mapPosition(int input)
{
return ControllerPosition((input % 10) * 2 + 1, (input / 10) * 2 + 1);
}
答案 0 :(得分:0)
我不确定发布的代码是否存在问题。以下适用于我:
struct ControllerPosition {
int y,x;
ControllerPosition(int _y = 0x7FFF,int _x = 0x7FFF) : y(_y),x(_x) {}
};
ControllerPosition mapPosition(int input)
{
return ControllerPosition((input % 10) * 2 + 1,(input / 10) * 2 + 1);
}
int main()
{
auto testvar = mapPosition(4);
return 0;
}
看看this post用更通用的术语讨论类似的错误。
答案 1 :(得分:0)
我找到了问题的根源。 Arduino IDE发现给定文件中的函数将它们的原型放在文件的开头,这意味着它将原型放在结构定义之前,并且函数使用结构作为其返回类型。因此,解决方案是在结构定义之后显式声明原型。
即。
struct ControllerPosition
{
int y;
int x;
};
ControllerPosition mapPosition(int input);
ControllerPosition mapPosition(int input)
{
return ControllerPosition((input % 10) * 2 + 1, (input / 10) * 2 + 1);
}
PS:可以通过创建类前向声明struct ControllerPosition;
在结构之前声明原型。