52


私がやりたいことは、ヘッダーファイルで変数を定義し、そのヘッダーを含めるたびにその変数を再定義せずに2つの異なるcppファイルで使用することです

変数.h

#ifndef VARIABLES_H // header guards
#define VARIABLES_H

static bool bShouldRegister;

#endif

(私もexternを試しましたが、何も変わりませんでした)

そして、cppファイルで値を指定する::bShouldRegister = trueか、bShouldRegister = true;

私の別のcppファイルでは、スレッドを作成してその値をチェックし、ループでその値をチェックします(そして、私のスレッド関数はうまく機能します)

 while (true)
 {
     if (::bShouldRegister) // Or if (bShouldRegister)
        {
            MessageBox(NULL,"Value Changed","Done",MB_OK|MB_ICONINFORMATION);
        }
  Sleep(100);
 }

はい、その MessageBox は表示されません (bShouldRegister が true になることはありません:/)

4

5 に答える 5

76

を使用する必要がありますextern。そうしないとbShouldRegister、各翻訳単位の変数がおそらく異なる値で区切られます。

これをヘッダー ファイル (.h) に入れます。

extern bool bShouldRegister;

これを実装ファイル (.cpp) の 1 つに入れます。

bool bShouldRegister;
于 2013-11-12T12:52:13.467 に答える
23

C++17 を使用できる場合は、インライン変数の使用を検討してください。

// in a header file
inline bool bShouldRegister = true;

インライン変数の仕組みを参照してください。詳細については。

于 2018-08-27T18:58:40.403 に答える
21

よりC++ に似た方法staticは、キーワードで構文的に示されるクラス メンバーを使用することです。クラス メンバー変数には、暗黙的externalなリンケージがあります。

#ifndef VARIABLES_H
#define VARIABLES_H

class RegUtil {
public:

    static bool bShouldRegister;

};

#endif

cpp ファイルの 1 つ (おそらくvariables.cpp) で、このクラス メンバーを定義する必要があります。

#include "variables.h"

bool RegUtil::bShouldRegister;
于 2013-11-12T14:10:36.683 に答える
10

モジュールの 1 つで変数を定義する必要があります。

bool bShouldRegister;

次に、ヘッダーで宣言しますextern(! ではありません)。static

extern bool bShouldRegister;
于 2013-11-12T12:52:11.343 に答える