首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++常量静态字符*数组

C++常量静态字符*数组
EN

Stack Overflow用户
提问于 2018-06-02 05:28:52
回答 2查看 3K关注 0票数 0

编辑:请注意,正如@ThomasMatthews answer中所述,最好不要将数据放在头部中。请参阅他的答案。

我想在一个类的头文件中创建一个静态的常量char*常量数组。例如:const static char* ar[3] = {"asdf","qwer","ghjk"};,但是我得到了一个错误。

下面是一个示例:

代码语言:javascript
复制
#include <iostream>
class test{
  static const char* const ar[3] = {"asdf","qwer","hjkl"};
}
int main(){}

下面是错误:

代码语言:javascript
复制
static data member of type 'const char *const [3] must be initialized out of line

我想知道我正在尝试做的事情是否可能。我读过Defining static const integer members in class definition,从它得到的印象是,你只能用int来做这件事。如果这是相关的,我使用的是mac,我的g++版本如下:

代码语言:javascript
复制
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-02 05:54:06

我建议不要将数据放在头文件中。

包括头文件在内的任何源文件都将获得数据的副本。

相反,可以使用extern声明:

data.h:

代码语言:javascript
复制
extern char const * data[3];

data.cpp:

代码语言:javascript
复制
char const * data[3] = {"asdf","qwer","hjkl"};
票数 2
EN

Stack Overflow用户

发布于 2018-06-02 06:10:19

需要为静态类成员提供单独的行外定义(带有初始值设定项)的根源在于,C++中确切的定义点会影响目标文件中导出符号的初始化顺序和位置。这门语言希望你自己做出这些决定。

但是,为了简化那些不关心这些东西的常见情况,可以从C++17开始,通过在静态成员声明中指定一个显式的inline关键字来做您想做的事情

代码语言:javascript
复制
class test{
  static inline const char* const ar[] = { "asdf", "qwer", "hjkl" };
};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50651206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档