我有一个可以根据按钮输入更改颜色的类。我想预定义一堆“颜色”,以便状态机可以将 header 中定义的常量结构简单地复制到某个变量以更改颜色。

我不明白为什么下面的代码会使编译器笨拙,但是链接程序无法处理它。有没有更好的模式来定义常量结构?我应该让它们成为非静态非const并与之一起生活吗?

class ColorManager {
 public:

  ColorManager () {
  }

  // ProcessButton uses the static constexpr structs defined below
  void ProcessButton(uint8_t button_state);

 private:
  // Color_t is defined elsewhere as a struct of R, G, B fields
  static constexpr Color_t kColorWhite  = {100, 100, 100};
  static constexpr Color_t kColorRed    = {100, 0, 0};
  static constexpr Color_t kColorPurple = {100, 0, 70};

};

编辑:
这是示例错误消息:
src/color_manager.o: In function `ColorManager::ProcessButton(uint8_t button_state)':
color_manager.cc:(.text+0x224): undefined reference to `ColorManager::kColorWhite'
collect2: error: ld returned 1 exit status

最佳答案

在C++ 17之前,这些constexpr静态成员声明不是定义。您需要以某种翻译单位提供定义。

Color_t ColorManager::kColorWhite;

在C++ 17中,这些将是隐式内联变量。

08-17 05:27