Arduino的 - 结构超出范围,为什么?(Arduino - struct out of sco

2019-10-24 04:18发布

我在一家电机PROGRAMM工作(和我有,为什么我使用结构来控制多台电机,多数民众赞成)与我的Arduino MEGA在一起。 我dont't明白为什么MOTOR超出范围时,我用它作为驱动函数参数:

typedef struct motor
{
   int EN;
   /*some more ints*/
}MOTOR;

MOTOR mot1;
MOTOR mot2; /*this works with no compile error*/
int drive (MOTOR*) /*here i have compile error out of scope, neither with or without pointer*/
{
   return 1;
}

void setup()
{}

void loop()
{}


sketch_jul25a:2: error: 'MOTOR' was not declared in this scope
sketch_jul25a:2: error: expected primary-expression before ')' token
sketch_jul25a.ino: In function 'int drive(MOTOR*)':
sketch_jul25a:9: error: 'int drive(MOTOR*)' redeclared as different kind of symbol
sketch_jul25a:2: error: previous declaration of 'int drive'
'MOTOR' was not declared in this scope

Answer 1:

因为通往地狱的路上满是善意的。

阿尔杜伊诺IDE尝试是通过在代码的开头产生用于所有用户定义的函数原型有帮助的。 当这些原型中的一个引用一个用户定义类型,事情中描述的方式炸毁。

诀窍是由IDE使代码无法解析:

namespace
{
  int drive (MOTOR*)
  {
     return 1;
  }
}

IDE将运行到namespace ,具有不知道该怎么做下面的块,所以跳过它。



Answer 2:

我建议这个应该做的命名空间的选择,因为好工作吗?

struct motor
{
   int EN;
   /*some more ints*/
};
int drive (motor* mtr);
motor mot1;
motor mot2; /*this works with no compile error*/

  int drive (motor* mtr)
  {
   return 1;
  }


void setup()
{}

void loop()
{
  int a = drive(&mot1);
}


Answer 3:

编辑:我原来的答复作出了一些假设的Arduino IDE更接近AVR-GCC比实际情况。 我的人一般建议谁是熟悉C或C ++是做了很多工作,这些芯片是采用Atmel的工作室和AVR-GCC直接作为你会遇到的问题少这样。

Arduino的其实是C ++的下方,但它确实一些预处理原来你的代码,这样获取的芯片编译(如创建的C ++代码之前mainsetuploop )。 你的问题是由于预处理工序,是通过解释伊格纳西奥巴斯克斯-艾布拉姆斯答案 。

作为一个更一般的C ++使用说明我建议改变你的结构定义如下:

struct motor
{
   int EN;
   /*some more ints*/
};

你可能想读在C ++“结构”和“typedef结构”之间的区别是什么? 看看为什么事情在C位不同++。



文章来源: Arduino - struct out of scope why?
标签: c arduino