我对C ++很陌生,所以请原谅我,如果这个错误是愚蠢的。我目前正在研究一个类,它可以保存单个字符(每个字符只有一个)并执行一些简单的操作。 我遇到的问题似乎是在类的构造函数中。因为我只有字符,所以我使用的是大小为256的bool数组。所以,如果我想在我的数组中添加字符“A”,我只需将数组[64]翻转为1。
要以我想要的方式使用数组,我为每个索引用零初始化它。所以它看起来像这样:
Set<char>::Set() {
bool _elements[256] = {0};
}
如果我现在检查成员变量_elements的所有值,它不仅包含零。我不知道是什么原因引起的。没有其他函数调用或其间的任何内容。
Set set;
for (int i = 0; i < 256; i++) { printf("%d\n", set._elemens[i]; }
答案 0 :(得分:4)
您正在构造函数中初始化局部变量_elements
,它将在离开构造函数时被销毁,并且与成员变量_elemens
无关。 (注意名称不一样。)
您可以按member initializer list初始化成员变量:
Set<char>::Set() : _elemens {0} {}
或in-class brace-or-equal initializer(我不知道Set
是如何宣布的,所以就像一个例子):
struct Set {
bool _elemens[256] = {0};
};
正如@ M.M指出的那样,对于这两种情况,只有{}
才能正常工作(所有元素都将设置为false
)并且更适合您的情况。
答案 1 :(得分:1)
数组_elements
是Set()构造函数的局部变量。你不应该能够在Set()构造函数之外访问它。
您想要使用它的方式,您需要_elements
作为类Set的公共成员变量。