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

时间:2014-05-13 10:46:46

标签: c++ arrays string

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

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?
};

3 个答案:

答案 0 :(得分:1)

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

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

无法使用赋值运算符(=)直接分配Raw(C样式)数组。可以分配std::array<string, 4> Elements,但语法为Elements = {"Steam", "Mud", "Sea", "Rain"}

答案 1 :(得分:1)

重要的是要注意这一行:

Elements [4] = {"Steam", "Mud", "Sea", "Rain"}; 

意味着&#39;将这些字符串分配给4元素长数组Elements&#39; Elements [4]指的是该数组中的特定项。鉴于Elements只有4个项目,尝试写入第五个项目会很糟糕。要将数组作为一个整体引用(就像你一次修改整个数组那样),只需使用Elements

现在,普通的旧式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;
};

或者,

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

注意数组初始化器周围的双括号;一些较旧的编译器需要std::array。较新的可以使用单个集{"Steam", "Mud", "Sea", "Rain"}正常工作。

答案 2 :(得分:0)

Elements[0] = "Steam";
Elements[1] = "Mud";
Elements[2] = "Sea";
Elements[3] = "Rain";

应该是最简单的方法。