如何初始化由四个元素组成的字符串数组。就像我知道如何初始化但我不知道在哪里?我的意思是在课堂上。它给我构造函数中的错误。需要帮助。
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?
};
答案 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";
应该是最简单的方法。