2016-06-21 63 views
1

私はC++にはかなり新しいので、間違いが愚かであれば私を許してください。私は現在、1つの文字(各1つだけ)を保存して、簡単な操作を行うクラスを作成しています。 私が持っている問題は、クラスのコンストラクタにあるようです。私はキャラクタしか持っていないので、サイズ256のブール配列を使用しています。配列に文字 "A"を追加したい場合は、配列[64]を1にフリップさせます。C++、bool配列が適切に初期化されていません

私がすべてのインデックスのために0で初期化する方法。したがって、次のようになります。

Set<char>::Set() { 
    bool _elements[256] = {0}; 
} 

メンバー変数_elementsのすべての値をチェックすると、ゼロだけでなく、私は何が原因か分かりません。その間に他の関数呼び出しやその他のものはありません。

Set set; 
for (int i = 0; i < 256; i++) { printf("%d\n", set._elemens[i]; } 
+0

'bool _elements [256] = {0};は最初の値のみを初期化しました。すべての配列を初期化したい場合は、 'memset'反復のC関数と0に設定します – fnc12

+3

@ fnc12 err no、すべてがゼロに設定されます(この場合は特にfalseです) –

答えて

1

配列_elementsは、Set()コンストラクタのローカル変数です。あなたはSet()コンストラクタの外でそれにアクセスすることはできません。

使い方は、_elementsがSetクラスのパブリックメンバー変数である必要があります。

4

ローカル変数_elementsをコンストラクタ内で初期化していますが、コンストラクタから出るときに破棄され、メンバ変数_elemensとは関係ありません。 (そして、名前が同じではありません注意してください。)

あなたはmember initializer listでメンバ変数を初期化することができます。

Set<char>::Set() : _elemens {0} {} 

またはin-class brace-or-equal initializer(私は例として、そう宣言されているかSet知りませんが):

struct Set { 
    bool _elemens[256] = {0}; 
}; 

そして@MMが指摘したように、両方のケースのためだけ{}うまくいくでしょうし、あなたのケースのために好ましいこと(falseに設定されますすべての要素)。

関連する問題