0

static int を更新しようとしています

test.h

static int Delay = 0;
void UpdateDelay();

test.cpp

#include "test.h"

void UpdateDelay(){
Delay = 500;
}

メイン.cpp

    #include "test.h"

    int main(){
    UpdateDelay();
    std::cout << Delay << std::endl;
    return 0;

}

出力は : 500 である必要がありますが、次のように表示されます: 0

どうも

4

4 に答える 4

6

として宣言されたグローバル変数には、static内部リンケージがあります。これは、各翻訳単位 (つまり.cppファイル) がその変数のプライベート コピーを取得することを意味します。

1 つの翻訳単位のプライベート コピーに加えられた変更は、異なる翻訳単位が保持する同じ変数のプライベート コピーには影響しません。

1 つのグローバル変数を共有する場合は、 1 つの翻訳単位で1 つの定義を提供し、キーワードを指定する宣言を通じて他のすべての翻訳単位がそれを参照できるようにします。extern

test.h

extern int Delay;
void UpdateDelay();

test.cpp

#include "test.h"

void UpdateDelay(){
    Delay = 500;
}

main.cpp

#include "test.h"

int Delay = 0; // Do not declare this as static, or you will give
               // internal linkage to this variable. That means it
               // won't be visible from other translation units.

int main(){
    UpdateDelay();
    std::cout << Delay << std::endl;
    return 0;
}
于 2013-02-19T20:38:16.917 に答える
3

.h ファイルを配置static int Delayすると、各 .cpp ファイルには独自の一意のインスタンスが含まれます。

extern を使用したい。

test.h

extern int Delay;
void UpdateDelay();

test.cpp

#include "test.h"
int Delay = 0;

void UpdateDelay()
{
    Delay = 500;
}
于 2013-02-19T20:39:23.033 に答える
0

.h で宣言することはできませんstatic int Delay。何が起こるかは、cpp ごとに異なります

あなたがしたいことは、test.cppでUpdateDelayのすぐ上にstatic int Delayを宣言することです

于 2013-02-19T20:38:17.700 に答える
0

この使用法では、キーワードstaticは、各 cpp ファイルに という変数の独自の独立したコピーがあることを意味しますDelay。したがって、UpdateDelay()変更されるのはmain()印刷されるものではありません。

単一の変数を使用する場合は、extern代わりにそれを作成します。ヘッダー ファイルにextern int Delay;. 1 つのソース ファイルに、int Delay = 0;.

于 2013-02-19T20:40:00.007 に答える