C++常量静态字符* 数组
C++ constant static char* array
>编辑:请注意,如@ThomasMatthews答案中所述,最好不要将数据放在标题中。请参考他的回答。
我想在类的头文件中创建一个静态常量字符* 常量数组。例如: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
我想知道我正在尝试做的事情是否可能。我已经阅读了在类定义中定义静态常量整数成员,我从中得到的印象是你只能用 int 来做到这一点。如果这是相关的,我使用的是 mac,我的 g++ 版本如下:
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
需要为静态类成员提供单独的行外定义(带有初始值设定项(,其根源在于C++中的确切定义点会影响初始化顺序和导出符号在对象文件中的位置。语言希望你自己做出这些决定。
但是,为了简化那些不关心这些东西的常见情况,从 C++17 开始,您可以通过在静态成员声明中指定显式inline
关键字来完全按照自己的方式执行
class test{
static inline const char* const ar[] = { "asdf", "qwer", "hjkl" };
};
我建议不要将数据放入头文件中。
包含标头的任何源文件都将获得数据的副本。
请改用extern
声明:
数据.h:
extern char const * data[3];
数据.cpp:
char const * data[3] = {"asdf","qwer","hjkl"};
即使我将它们全部放入头文件中,这也有效(但是在这种情况下,line_001必须在类定义块之后,如下所示(。但您也可以将line_001放入 cpp 文件中。
使用常量指针:
class MyClass
{
public:
MyClass();
static char const* const arr[3];
};
char const* const MyClass::arr[3] = {"aaaa", "bbbbb", "ccccc"};
如果没有常量指针:
class MyClass
{
public:
static const char* arr[3];
};
const char* MyClass::arr[3] = {"aaaa", "bbbbb", "ccccc"}; // line_001
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 按字符值访问int数组
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- C++ 带结构的数组字符
- 数组字符包含量超出预期
- 读取文件并添加到数组字符
- 如何在Qt中更改或替换数组字符
- 为什么编译器不在参数中传递数组字符 *arr[] 的大小?
- 井字棋数组字符错误
- 分割数组字符