web-dev-qa-db-ja.com

別のファイルからC ++のextern変数にアクセスする

Cppファイルの1つにグローバル変数があり、そこに値を割り当てています。別のcppファイルで使用できるようにするために、これをexternとして宣言しています。このファイルには、これを使用する複数の関数があるため、これをグローバルに実行しています。これで、この変数の値は、一方の関数でアクセスでき、もう一方の関数ではアクセスできなくなりました。ヘッダーファイルで使用する以外の提案は、4日間無駄にしたので、良いでしょう。

13
Venushree Patel

申し訳ありませんが、ヘッダーファイルの使用以外の提案をする回答のリクエストは無視しています。正しく使用する場合、これがヘッダーの目的です...注意深く読んでください。

global.h

#ifndef MY_GLOBALS_H
#define MY_GLOBALS_H

// This is a declaration of your variable, which tells the linker this value
// is found elsewhere.  Anyone who wishes to use it must include global.h,
// either directly or indirectly.
extern int myglobalint;

#endif

global.cpp

#include "global.h"

// This is the definition of your variable.  It can only happen in one place.
// You must include global.h so that the compiler matches it to the correct
// one, and doesn't implicitly convert it to static.
int myglobalint = 0;

ser.cpp

// Anyone who uses the global value must include the appropriate header.
#include "global.h"

void SomeFunction()
{
    // Now you can access the variable.
    int temp = myglobalint;
}

プロジェクトをコンパイルしてリンクするときは、次のことを行う必要があります。

  1. 各ソース(.cpp)ファイルをオブジェクトファイルにコンパイルします。
  2. すべてのオブジェクトファイルをリンクして、実行可能ファイル/ライブラリなどを作成します。

上で示した構文を使用すると、コンパイルエラーもリンクエラーも発生しないはずです。

38
paddy