webentwicklung-frage-antwort-db.com.de

C ++ Globale Variablendeklaration


Ich möchte lediglich eine Variable in einer Header-Datei definieren und sie für zwei verschiedene CPP-Dateien verwenden, ohne diese Variable jedes Mal neu zu definieren, wenn ich diesen Header einbinde
So habe ich es versucht:

Variablen.h

#ifndef VARIABLES_H // header guards
#define VARIABLES_H

static bool bShouldRegister;

#endif

(Habe auch extern probiert aber nichts geändert)

Und in einer CPP-Datei gebe ich einen Wert ::bShouldRegister = true oder bShouldRegister = true;

In meiner anderen cpp-Datei überprüfe ich den Wert durch Erstellen eines Threads und überprüfe den Wert in einer Schleife (und ja, meine Thread-Funktion funktioniert gut)

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

Und ja, diese MessageBox erscheint niemals (bShouldRegister wird niemals wahr: /)

31
Shahriyar

Sie müssen extern verwenden, andernfalls haben Sie bShouldRegister in jeder Übersetzungseinheit mit wahrscheinlich unterschiedlichen Werten.

Fügen Sie dies in eine Header-Datei (.h) ein:

extern bool bShouldRegister;

Fügen Sie dies einfach in eine der Implementierungsdateien (.cpp) ein:

bool bShouldRegister;
51
deepmax

Ein C++ - ähnlicher Weg wäre die Verwendung eines Klassenmitglieds, das syntaktisch durch das Schlüsselwort static angegeben wird. Klassenmitgliedsvariablen haben eine implizite external Verknüpfung.

#ifndef VARIABLES_H
#define VARIABLES_H

class RegUtil {
public:

    static bool bShouldRegister;

};

#endif

in einer ihrer cpp dateien (vielleicht variables.cpp) müssen Sie dieses Klassenmitglied definieren:

#include "variables.h"

bool RegUtil::bShouldRegister;
18
Wolf

Sie müssen die Variable in einem der Module definieren:

bool bShouldRegister;

Dann deklarieren Sie es extern (nicht static!) In der Kopfzeile:

extern bool bShouldRegister;
9
Fred Foo

Wenn Sie C++ 17 verwenden können, sollten Sie eine Inline-Variable verwenden:

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

Weitere Informationen finden Sie unter Wie funktionieren Inline-Variablen? .

6
bcd