Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在类中初始化字符串数组?_C++_Arrays_String - Fatal编程技术网

C++ 如何在类中初始化字符串数组?

C++ 如何在类中初始化字符串数组?,c++,arrays,string,C++,Arrays,String,如何初始化由四个元素组成的字符串数组。就像我知道如何初始化,但我不知道在哪里??我是说在教室里。它给了我构造函数中的错误。需要帮助 class Water :public Element { public: Water () { } Water(string n): Element (n) { water = n; i=-1; //Error Message: expected an expre

如何初始化由四个元素组成的字符串数组。就像我知道如何初始化,但我不知道在哪里??我是说在教室里。它给了我构造函数中的错误。需要帮助

class Water :public Element 
{
public:     
    Water () { }    

    Water(string n): Element (n)
    {
        water = n;
        i=-1;
            //Error Message: expected an expression
        Elements [4] = {"Steam", "Mud", "Sea", "Rain"}; 
    }

    string water;
    int i;
    bool elementexists;

    string Elements [4];//how to initialize this and where?
};

应该是最简单的方法。

您可以在构造函数初始化列表中初始化它:

Water(string n) 
  : Element(n)
  , water(n)
  , i(-1)
  , Elements{"Steam", "Mud", "Sea", "Rain"} // <- Note the curly braces here.
{}
水(字符串n)
:元素(n)
,水(n)
,i(-1)

,元素{“蒸汽”、“泥浆”、“海洋”、“雨水”}/需要注意的是,这条线:

Elements [4] = {"Steam", "Mud", "Sea", "Rain"}; 
并不意味着“将这些字符串分配给4元素长数组,元素”<代码>元素[4]
引用该数组中的特定项。考虑到
元素
只有4项长度,尝试写入第五项将是不好的。要将数组作为一个整体引用(就像您一次修改整个数组一样),只需使用
元素

现在,普通的老式C样式数组不支持初始化,就像您在那里尝试的那样

我建议使用
std::array
。。。在使用时,它们比C样式数组更容易使用。如果可能有不同数量的元素,则应使用
std::vector

class Water :public Element 
{
public:     
    Water () { }    

    Water(std::string n): Element (n)
    {
        water = n;
        i=-1;
        elements = {{"Steam", "Mud", "Sea", "Rain"}}; 
    }

    std::string water;
    int i;
    bool elementexists;

    std::array<std::string, 4> elements;
};

注意数组初始化器周围的双括号;一些较旧的编译器要求
std::array
使用它们。新的一个可以用一套好的工作,<代码> {蒸汽,“泥浆”,“海”,“雨”} /代码> .< /p>你在这里使用C++吗?如果可能,请提供一个可以编译的完整示例。您还应该包括完整的错误消息。是的,它的C++。对不起,没有提及。你现在可以查看了。std::vector,std::string你回答了how,但没有回答where。+1从我这里得到答案,问题的标题是how!!依我看,第二点应该是重点:使用成员初始值设定项列表比在构造函数体中使用要好。@Chnossos是的,这可能是真的。我试着采用“一次只改变一件事”的方法。另外,gcc 8.4表明,将大括号加倍是没有必要的。@Chnossos是的,我使用的是gcc 4.7,它确实需要大括号。VS2013似乎很高兴没有了它。鉴于双大括号似乎是可以接受的,这也许是更普遍使用的形式?我不知道将来是否有计划反对这种语法。IIRC标准确实建议在这种情况下可以省略额外的大括号。这很可能是一个GCC错误。大括号不应该放在括号里吗?e、 g.:…,Elements({“Steam”,“Mud”,“Sea”,“Rain”})VS2013很乐意编译
Elements={“Steam”,“Mud”,“Sea”,“Rain”},但intellisense会发出警告。GCC 4.7.2不是,并且要求
元素={{“蒸汽”、“泥浆”、“海洋”、“雨水”}
VS2013确实接受
{{}
版本,所以这可能是更好的方法?它为我编译。谢谢,我不知道。使用gcc(和-std=c++11)
class Water :public Element 
{
public:     
    Water () { }    

    Water(std::string n): Element (n)
    {
        water = n;
        i=-1;
        elements = {{"Steam", "Mud", "Sea", "Rain"}}; 
    }

    std::string water;
    int i;
    bool elementexists;

    std::array<std::string, 4> elements;
};
Water(std::string n): Element(n), elements{{"Steam", "Mud", "Sea", "Rain"}}
{
    water = n;
    i=-1;
}