1

Visual Studio プロジェクトで、複数の cpp ファイルにまたがるいくつかの変数を編集してアクセスする必要があります。そこで、次のように、必要なすべての変数を含む名前空間を持つヘッダー ファイルを作成しました。

namespace windowdimension{
    TCHAR openwindows[20][180];
    int winnum = 0;
    int windowleft = 0;
    int windowright = 1360;
    INT windowtop = 0;
    INT windowbottom = 768;
    LONG leftarray[20];
    LONG rightarray[20];
    LONG toparray[20];
    LONG bottomarray[20];

}

ただし、#includeこのヘッダー ファイルを 2 つのソース ファイルに含めると、このリンカー エラー 2005 が表示され、パラメーターが他の obj で既に定義されているというメッセージが表示されます。

同じエラーの他の質問を参照すると、ここでそれを知りました

関数定義は 1 回しか表示できません。.h ファイルを #include するすべての .cpp ファイルは、関数の別のコピーを生成します。

しかし、それは名前空間変数にも当てはまりますか? もしそうなら、複数のソースファイルで特定の変数へのアクセスを保証するにはどうすればよいでしょうか?

4

2 に答える 2

2

ヘッダー ファイルでグローバル変数を定義しないでください。

共有できるようにするには、それらをヘッダー ファイルで (externキーワードを使用して) 宣言し、.cpp ファイルで 1 回だけ定義する必要があります。

確かに、すべてのヘッダー ファイルにガードを含めることを忘れないでください (#pragma onceかなりポータブルなソリューションです)。

グローバル.hpp

#pragma once

namespace global {
   extern int variable;
}

グローバル.cpp

namespace global {
   int variable = 0;
}

とにかく、グローバル変数を使用するのは非常に悪い習慣です。

于 2015-10-08T12:25:54.393 に答える
0

インクルード ガードを追加するのを忘れた可能性があります。

Header.h

#ifndef HEADER_H
#define HEADER_H

namespace something {
}

#endif

別のオプションは#pragma once、ヘッダー ファイルの最初で使用することです。

于 2015-10-08T12:22:06.957 に答える