c – constexpr静态数据成员给出未定义的引用错误
发布时间:2020-12-16 09:54:09 所属栏目:百科 来源:网络整理
导读:我正在研究一个内核,我想让我的静态数据成员constexpr,所以我可以在枚举类中使用它的值.但是,如果我这样做,我会得到一个未定义的引用错误.如果我把它变成非constexpr并在类之外初始化它,它似乎才有效. 工作: // terminal.hppclass Terminal{ static uint32_
我正在研究一个内核,我想让我的静态数据成员constexpr,所以我可以在枚举类中使用它的值.但是,如果我这样做,我会得到一个未定义的引用错误.如果我把它变成非constexpr并在类之外初始化它,它似乎才有效.
工作: // terminal.hpp class Terminal { static uint32_t col_map[16]; }; // terminal.cpp uint32_t Terminal::col_map[16] = { 0x000000,0x0000AA,0x00AA00,0x00AAAA,0xAA0000,0xAA00AA,0xAA5500,0xAAAAAA,0x555555,0x5555FF,0x55FF55,0x55FFFF,0xFF5555,0xFF55FF,0xFFFF55,0xFFFFFF }; 不工作: // terminal.hpp class Terminal { constexpr static uint32_t col_map[16] = { 0x000000,0xFFFFFF }; enum class Color : uint32_t { Black = col_map[0],White = col_map[15] }; }; 请注意,我试图在常规编译器上重现这一点失败,所以我认为它与内核或交叉编译器有关. 链接器错误: terminal.o: In function `Terminal::drawcolormap()': terminal.cpp:(.text+0x6f): undefined reference to `Terminal::col_map' 我总是跑得干净;使. 解决方法
如果静态数据成员使用了od-used — period,则应在类外定义.这条规定没有例外.
在数据成员是constexpr的情况下,它也必须在类定义中初始化.但是,这并没有废除在课堂外定义它的要求. 正确的代码: class Terminal { constexpr static uint32_t col_map[16] = { /* ... */ }; // ... }; constexpr uint32_t Terminal::col_map[16]; // definition 这是违反直觉的,但这就是它的方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ajax – 为什么ExtJS向同一个域发送OPTIONS请求?
- VideoIO Flash-based audio and video communication
- ruby – 将元素注入Hash.new([])时<<和=有什么区别?
- ios – 我可以将故事板从一个项目复制到另一个项目吗?
- Red5 AMF3 Flex : Data Type Mappings
- swift怎么解决错误提示 'required' initializer &#
- Building a Flexible UI
- ruby三重等于
- CocoStudio textfiled 文本点击区域按背景拉伸
- c – 如何将char数组中的一系列数据复制到向量中?