如何声明和初始化类中的字符串数组?

时间:2014-09-12 21:32:12

标签: c++ arrays

我试图在我的头文件中声明一组代表西装的字符串数组,并在我的实现文件中初始化它。我已尝试initializer_list并试图在我的构造函数中初始化它,但没有任何效果。我终于遇到了这个链接Initializing a static const array of const strings in C++,但我不明白为什么这样做有效,以前的方法没有。

为什么char在这里使用

static const char * const days[]

而不是string?为什么要使用指针?

我很困惑,为什么我根本无法在我的头文件中声明和初始化数组。

2 个答案:

答案 0 :(得分:11)

使用C样式字符串的第一种方法:

struct Foo {
    static char const *arr[];
};

char const *Foo::arr[] = {"ace_hearts", "2_hearts", "3_hearts"};

LIVE DEMO

使用std::string的第二种方法:

struct Foo {
    static std::string const arr[];
};

std::string const Foo::arr[] = {"ace_hearts", "2_hearts", "3_hearts"};

LIVE DEMO

使用std::stringstd::array以及初始值设定项列表的第三种方法:

struct Foo {
    static std::array<std::string, 3> const arr;
};

std::array<std::string, 3> const Foo::arr {"ace_hearts", "2_hearts", "3_hearts"};

LIVE DEMO

答案 1 :(得分:5)

首先:我建议不要将字符串文字放入你的类来表示套装,如果你使用简单的东西,比如enum或char,那么制作逻辑会容易得多。

除此之外,在这里使用指针而不是使用诸如std :: string之类的原因是因为你存储的是非常简单和准确的数据(只有四种可能性,你不需要搜索它,或拆分它等等)因此不需要std :: string包含的所有额外功能。

实现此目的的语法可能是:

static const char* const suits[4];

const char*是数组的类型(它是一个const char指针的数组,它是C风格的字符串),而const suits [4]使它成为一个名为{{的四个数组的数组1}}无法改变(是const)。

一旦在类中声明了静态成员,就必须在其他地方初始化它,并在类之外。例如,在你的.h文件中你会写:

suits

语言语法如何与静态成员一起使用。