错误:'constexpr'未命名类型 m- Arduino IDE

error: 'constexpr' does not name a type m- arduino ide

本文关键字:Arduino IDE 类型 constexpr 错误 未命名      更新时间:2023-10-16

我正在尝试使用Arduino 1.0.5-r2 IDE编译此c++代码

#include <cstdint>
#include "mcal_reg.h"
class led
{
public:
  // Use convenient class-specific typedefs.
  typedef std::uint8_t port_type;
  typedef std::uint8_t bval_type;
  // The led class constructor.
  led(const port_type p,
      const bval_type b) : port(p),
                           bval(b)
  {
    // Set the port pin to low.
    *reinterpret_cast<volatile bval_type*>(port)
      &= static_cast<bval_type>(~bval);
    // Set the port pin to output.
    *reinterpret_cast<volatile bval_type*>(port - 1U)
      |= bval;
  }
  void toggle() const
  {
    // Toggle the LED via direct memory access.
    *reinterpret_cast<volatile bval_type*>(port)
      ^= bval;
  }
private:
  // Private member variables of the class.
  const port_type port;
  const bval_type bval;
};
namespace
{
  // Create led_b5 on portb.5.
  const led led_b5
  {
    mcal::reg::portb,
    mcal::reg::bval5
  };
}
int main()
{
  // Toggle led_b5 in a loop forever.
  for(;;)
  {
    led_b5.toggle();
  }

包含文件mcal_reg.h如下:

  #ifndef _MCAL_REG_2011_11_04_H_
  #define _MCAL_REG_2011_11_04_H_
  #include <cstdint>
  namespace mcal
  {
    namespace reg
    {
      constexpr std::uint8_t portb = 0x25U;
      constexpr std::uint8_t bval0 = 0x01U;
      constexpr std::uint8_t bval1 = 0x01U << 1U;
      constexpr std::uint8_t bval2 = 0x01U << 2U;
      constexpr std::uint8_t bval3 = 0x01U << 3U;
      constexpr std::uint8_t bval4 = 0x01U << 4U;
      constexpr std::uint8_t bval5 = 0x01U << 5U;
      constexpr std::uint8_t bval6 = 0x01U << 6U;
      constexpr std::uint8_t bval7 = 0x01U << 7U;
    }
  }
#endif // _MCAL_REGISTERS_2011_11_04_H_
}

尝试编译会导致以下编译错误:

mcal_reg.h:17: error: 'constexpr' does not name a type

指这一行:constexpr std::uint8_t portb = 0x25U;

我已经在我的库文件夹中设置了一个mcal_reg目录,其中包含mcal_reg.h文件。这是我的第一个Arduino项目,我正在编写一个程序,以闪现到一个独立的AVR芯片。但是我不能编译这个程序。我的系统是Windows 7。我只安装了Arduino IDE自带的软件。(没有单独的GNU, Ms Visual Studio…等)请帮助。

要使用像constexpr这样的c++ 11特性,您需要将IDE更新到当前的测试版(http://arduino.cc/en/main/software#toc3)。然后通过编译器标志-std=c++11启用c++ 11支持。

要添加编译器标志,请找到正确的platform.txt(见这里)和然后在

中添加/change
## Compiler global definitions
compiler.path={runtime.ide.path}/tools/avr/bin/
compiler.c.cmd=avr-gcc
compiler.c.flags=-c -g -Os -w -ffunction-sections -fdata-sections -MMD -std=c++11