我有一个可以根据按钮输入更改颜色的类。我想预定义一堆“颜色”,以便状态机可以将 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中,这些将是隐式内联变量。