编辑:请注意,正如@ThomasMatthews answer中所述,最好不要将数据放在头部中。请参阅他的答案。
我想在一个类的头文件中创建一个静态的常量char*常量数组。例如:const static char* ar[3] = {"asdf","qwer","ghjk"};,但是我得到了一个错误。
下面是一个示例:
#include <iostream>
class test{
static const char* const ar[3] = {"asdf","qwer","hjkl"};
}
int main(){}下面是错误:
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++版本如下:
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.5.0
Thread model: posix发布于 2018-06-02 05:54:06
我建议不要将数据放在头文件中。
包括头文件在内的任何源文件都将获得数据的副本。
相反,可以使用extern声明:
data.h:
extern char const * data[3];data.cpp:
char const * data[3] = {"asdf","qwer","hjkl"};发布于 2018-06-02 06:10:19
需要为静态类成员提供单独的行外定义(带有初始值设定项)的根源在于,C++中确切的定义点会影响目标文件中导出符号的初始化顺序和位置。这门语言希望你自己做出这些决定。
但是,为了简化那些不关心这些东西的常见情况,可以从C++17开始,通过在静态成员声明中指定一个显式的inline关键字来做您想做的事情
class test{
static inline const char* const ar[] = { "asdf", "qwer", "hjkl" };
};https://stackoverflow.com/questions/50651206
复制相似问题