[解決済み] 静的なブーリアン動作が理解できない
質問
ヘッダーファイルには、すべてのファイルが使用する静的変数があります。その中に、0に初期化されたブーリアン変数があります。
//in utility.h
static bool read_mess = false;
コマンドライン引数に --view-read-messages がある場合に true に変更し、クライアントからメッセージを受け取ったときに次のようなことをできるようにしたい -。
//code from a different file
if(UTILITY_H::read_mess)
std::cout<<"\nMessage successfully received from Client 2: "<<in2;
mainでは、コマンドライン引数をチェックし、変数read_messをtrueに設定しています -。
//this is in a for, where temp is the command line arg[i]
else if(strcmp(temp.c_str(), "--view-read-messages") == 0) {
UTILITY_H::read_mess = true;
}
mainのこの行の後にread_messの値を表示させると、trueと表示されます。しかし、私が上に投稿したifステートメントでその真偽をチェックしているとき、read_messはfalseに戻っています。なぜこのようなことが起こるのでしょうか?きっと簡単なことだと思うのですが、どうしてもうまくいきません。UTILITY_H:: を実行するたびに utility.h のすべての変数が再初期化されるのでしょうか?もしそうなら、なぜですか?
解決方法は?
static
この文脈では、quot;local" (翻訳ユニットに対して)を意味します。のコピーは複数存在します。
read_mess
である翻訳単位ごとに1つずつ、プログラム内に存在します。
ではなく
ヘッダーファイルと同じものです。(あなたの場合、quot;translation unit" を .cpp または .c または .cc ファイルと近似させることができます)。
おそらく、あなたがやろうとしたことは
宣言
アン
extern
変数、または
static
クラスメンバー
と
定義
を1つの翻訳ユニットで実現しました。
実際には
extern
というのは、ヘッダーファイルの中で書きたいことを意味します。
extern bool read_mess;
しかし 唯一無二の は、ヘッダーではない他の場所です。
bool read_mess = false;
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】'cout'は型名ではない
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】C++の「翻訳ユニット」とは何ですか?