'ControllerPosition'没有命名类型

时间:2016-02-29 16:44:49

标签: c++ arduino arduino-ide

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

2 个答案:

答案 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;在结构之前声明原型。