c++ - 错误: 'constexpr' does not name a type m- arduino ide

标签 c++ arduino

我正在尝试使用 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(请参阅 here )并 然后添加/更改为

## 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

关于c++ - 错误: 'constexpr' does not name a type m- arduino ide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24845127/

相关文章:

c++ - Arduino:指针子类的继承和数组

c++ - 使用 fprintf 连续写入字符串

Python- Firmata 和 Arduino,影响 Firmata 的脚本结构

.net - 由于 2 秒超时,并非所有 native 全局变量都在混合模式 .Net 应用程序中被破坏

c++ - atomic - 已删除的复制构造函数

c++ - 中止核心转储 C++

c - 响应某些命令的 Sketch 是如何完成的?

自定义库的 Arduino Due 条件编译常量

c++ - 平方和矩阵

c++ - Visual C++ - 覆盖从 DLL 导入的函数?