Arduino 1.6.9 / 1.610版本因"' constexprint'而失败没有命名类型"

时间:2016-07-25 21:23:51

标签: c++11 arduino constexpr

据说是Arduino的IDE> 1.6.2具有C ++ 11支持。

我刚刚下载并在OSX上运行1.6.9版本(正如其他人报道的那样,Windows上的这个重复版本也是1.6.9 / 1.6.10)。

我无法编译这个简单的程序:

constexpr int get_five() { return 5; }

void setup() {
  Serial.begin(9600);
  Serial.println(get_five());
}

void loop() {
}

我在尝试构建或上传时收到此错误:

sketch_jul25a:1: error: 'constexprint' does not name a type
 constexpr int get_five() { return 5; }
 ^
exit status 1
'constexprint' does not name a type

我已经查看了这个问题和答案,但据推测它不再适用于我使用的1.6.9版本的IDE - error: 'constexpr' does not name a type m- arduino ide

我已经挖掘了构建时由IDE输出的临时文件,似乎它正在尝试自动生成函数的头文件(我假设支持多文件草图),并在遇到时做错了constexpr

#include <Arduino.h>
#line 1 "/Users/<my_username>/Documents/Arduino/sketch_jul25a/sketch_jul25a.ino"
#line 1 "/Users/<my_username>/Documents/Arduino/sketch_jul25a/sketch_jul25a.ino"
#line 1 "/Users/<my_username>/Documents/Arduino/sketch_jul25a/sketch_jul25a.ino"
constexprint get_five(); // **** <- This looks to be the culprit
#line 3 "/Users/<my_username>/Documents/Arduino/sketch_jul25a/sketch_jul25a.ino"
void setup();
#line 9 "/Users/<my_username>/Documents/Arduino/sketch_jul25a/sketch_jul25a.ino"
void loop();
#line 1 "/Users/<my_username>/Documents/Arduino/sketch_jul25a/sketch_jul25a.ino"
constexpr int get_five() { return 5; }

void setup() {
  Serial.begin(9600);
  Serial.println(get_five());
}

void loop() {
}

这是Arduino IDE中的错误吗?它是OSX独有的吗?是否有允许constexpr工作的解决方法?

在谷歌上搜索我发现一些Arduino库正在使用constexpr,所以我假设它可以在某些情况下使用。

1 个答案:

答案 0 :(得分:3)

这是arduino-builder的已知限制。

在修复之前,您可以在函数上方添加原型。这将阻止IDE错误地生成自己的。

constexpr int get_five();
constexpr int get_five() { return 5; }

void setup() {
  Serial.begin(9600);
  Serial.println(get_five());
}

void loop() {
}