'ControllerPosition'不命名类型

'ControllerPosition' does not name a type

本文关键字:类型 ControllerPosition      更新时间:2023-10-16

在下面的代码中,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);
}

我不确定发布的代码是否有问题。以下内容对我有用:

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;
}

看看这篇文章,用更通用的术语讨论类似的错误。

我已经找到了问题的根源。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;