gpt4 book ai didi

C++ static const struct 初始化

转载 作者:行者123 更新时间:2023-11-30 03:19:10 26 4
gpt4 key购买 nike

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

我不明白为什么编译器对下面的代码很笨拙,但链接器却无法处理它。是否有更好的模式来定义常量结构?我应该让它们成为非静态非常量并接受它吗?

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 中,这些将是隐式内联变量。

关于C++ static const struct 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53940335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com