2012-02-12 3 views
0

ヘッダーファイルには2つの変数があります。 私のプログラムの構造上、2つの "ld:duplicate symbol"エラーがあります。 これらの2つの変数は、ローカルな意味しか持ちません。 これらの変数を "プライベート"にする方法はありますか?ヘッダーファイルが別のソースファイルに含まれていてもヘッダーファイルの外には見えませんか?ヘッダファイル内の変数を「隠す」方法は?

EDIT:私はcppファイルに変数を入れていいですか教えてください。これらの変数は、ソリューションがあなたのヘッダファイルで変数を定義しないことです

extern char Lookup[][3] = { "aa", "ab", "ac", "ad", "ae", "af", ... and so on (really long)} 
+1

あなたのケースではC++の 'namespace'を使用できますか? –

答えて

5

...初期化中に定義された非常に大きな配列、であり、コードの行の多くを取ります。

どうしても内部のソースファイル間で変数を共有しなければならない(と私はあなたがいないことをお勧めします)、その後、あなたは次の操作を行う必要がある場合は、次の

  1. 「internal.hを」を作成します。
  2. 変数externをそのヘッダーファイルに宣言します。
  3. 両方の内部ソースファイルに "internal.h"を含めます。
  4. 変数を1つまたは他の内部ソースファイルに定義します。

変数は現在、外界から隠されています。 (おそらくあなたのオブジェクトファイルにはまだ目に見えるかもしれませんが、プラットフォーム固有のトリッキーを使ってそれを取り除くことができます)。

+0

私の質問で編集を確認してください –

3

変数をヘッダに定義しないでください。

externを使用して、変数を定義せずにヘッダーに宣言します。

+0

私の質問で編集を確認してください –

0

私は常に「緩やかな」変数に疲れています。つまり、彼らは何かに影響を及ぼしますか?彼らはクラスに属していますか?

クラスの下で宣言して静的変数として宣言してはいけませんか? (そして、構文も与えられていると思いますが)その場合は、静的変数(イニシャライザリスト、静的初期化関数など)で通常行われるすべてのものを単純に使用できます。あなたの変数は何かに縛られているので、はるかに明確になっています。