2012-04-06 6 views
3

私は定数を持つ2つのクラスを持っています。目的関数-cの定数を使用します。重複するシンボルの問題

例えばclass_a.mが一定kWidth = 150が含まれているというクラスがあり、

また、私は私が手に私のプロジェクトを実行した後、一定kWidth = 200

caontain class_b.mと呼ばれるクラスを持っています重複したシンボルのエラーですが、これらのファイルはネストされていません(class_aをclass_bに、class_bをclass_aに)。また、私はこのconstantin実装だけを使用します。

出典:

const int kWidht = 150; 

エラーの説明:助けを

ld: duplicate symbol _kWidht... 

ありがとう!

+1

コードを投稿してください。変数はどのように宣言されていますか? '静的'? – pgb

+0

返信ありがとう!私は私の質問を更新します。 plsそれを見て、ありがとう! –

+0

はい私は静的な、感謝を使用する必要があります! –

答えて

14

定数がその単一の実装ファイル内でのみ使用される場合は、その宣言の先頭にstaticを付ける必要があります。それは、これをオンにします

const int kWidth = 150; 

をこのへ:

static const int kWidth = 150; 

staticキーワードは、このシンボルは、現在のファイル内で使用されるコンパイラに指示します。 コンパイラは、というグローバル変数を宣言しているものとします。この変数は最終アプリケーションのどこからでもアクセスできます。同じ名前の2つのグローバル変数を宣言することは、それらを区別することができないので、良い考えではありません。そのため、コンパイラは正しく文句を言います。幸運にも、staticキーワードであなたの意図をより明確にするだけで簡単に修正できます。


1:より正確には「翻訳単位」ですが、「ファイル」はこの質問の目的には十分です。

1

状況を回避する別の方法は、クラス内のすべての定数を '収集'することです。そうすれば、すべての定数名の概要がわかります。欠点は、これらはグローバル変数とみなすことができることであり、必ずしもそうではない。

関連する問題