3

定数を持つ2つのクラスがあります。

たとえば、class_a.mというクラスには、定数が含まれていますkWidth = 150

また、class_b.mというクラスが定数を持っていますkWidth = 200

プロジェクトを実行した後、シンボルが重複しているというエラーが発生しますが、これらのファイルはネストされていません(つまり、class_aをclass_bに、またはclass_bをclass_aに)。また、私はこの定数を実装でのみ使用します。

ソース:

const int kWidht = 150;

エラーの説明:

ld: duplicate symbol _kWidht...

手伝ってくれてありがとう!

4

2 に答える 2

14

定数がその単一の実装ファイル内でのみ使用される場合は、宣言の前にstatic. つまり、次のようにします。

const int kWidth = 150;

これに:

static const int kWidth = 150;

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


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

于 2012-04-06T12:34:04.180 に答える
1

この状況を回避する別の方法は、クラス内のすべての定数を「収集」することです。そうすれば、すべての定数名の概要をよりよく把握できます。欠点は、これらがグローバル変数であると見なされる可能性があることです。これは常に評価されるとは限りません。

于 2013-08-04T15:29:17.107 に答える