2017-01-29 15 views
-2

グローバル変数の範囲を含む複数のCPPファイルにヘッダファイルを含める必要があります。しかし、私が抱えている問題は、変数を変更可能にすることができないということです。私は、ヘッダーファイルまたは任意のcppファイルで変数を初期化できますが、変更するには、コンパイルしないか、変数のインスタンスを2つ作成して、範囲外です。私は機能の価値を変えることができる方法が必要です。静的を使用して変更可能なグローバル変数C++

例(これは、他の変数のスコープ外の変数のインスタンスを作成します)

#pragma once 

namespace SCE 
{ 
static bool SC_DEBUG = false; 
static bool VSYNC = true; 
static int SC_LOG_LEVEL = 3; 
} 

アイブ氏はまた、「EXTERN」を使用してみましたが、私はどちらかそれとは運がなかったです。

#pragma once 

namespace SCE 
{ 
    extern bool SC_DEBUG; 
    extern bool VSYNC; 
    extern int SC_LOG_LEVEL; 
} 

編集 私はエラー "エラーLNK2001:未解決の外部シンボル "を取得私は試してみて、それが作成されます一度変数を編集する場合、ブールSCE :: VSYNC"(VSYNC @ SCE @@ 3_NA?)" をexternを使って。私は試してみて、それを編集方法はとても

int main() 
{ 
    SCE::VSYNC = false; 
    // ... 
} 

ソリューション 私はマルチプロジェクトのセットアップを使用しているようなものです。だから起こっているのは、 'プロジェクトB'にはグローバル変数ヘッダーファイルとcppが含まれていますが、 'プロジェクトA'は設定された値を変更しようとしています。現在、何らかの理由で、 'Project A'はグローバル変数ヘッダーファイルを取得しているだけなので、変数定義を取得できますが、変数の初期化を見ることができず、奇妙なエラーが発生します。ヘッダファイルで

答えて

0

externで変数を定義します。

// globals.h 
namespace SCE 
{ 
    extern bool SC_DEBUG; 
    extern bool VSYNC; 
    extern int SC_LOG_LEVEL; 
} 

と実装ファイルでそれらを定義します。

// globals.cpp 
namespace SCE 
{ 
    bool SC_DEBUG = false; 
    bool VSYNC = true; 
    int SC_LOG_LEVEL = 3; 
} 

今、あなたはあなたの他のファイルにヘッダーを含めることができます。

+0

私がいる問題ではない、私は細かいそれらを作成することができますが、それはそれらを編集するために来るとき、私はエラーエラーLNK2001取得:「未解決の外部シンボルをブール値SCE :: VSYNC "(?VSYNC @ SCE @@ 3_NA) – 0xen

+0

@ 0xenプロジェクトにすべてのファイルを含めましたか? 'globals.cpp'が含まれていないと、そのエラーが発生します。 –

+0

私の編集で上記のような変数を試したり編集したりしないと、コンパイルして正常に動作します。 – 0xen

0

あなたの質問は少し不明です。静的変数の問題に直面しているようです。静的変数は、範囲外であってもその値を保持することができます。プログラムが実行されるまで、彼らは記憶に残ります。たとえば。

#include<stdio.h> 
static int i = 0; 
int fun() 
{ 
    i= i+5; 
} 

int main() 
{ 
    fun(); 
    printf("%d ", i); 
    i= 10, 
    printf("%d ", i); 
    return 0; 
} 

出力:5 10

関連する問題