2012-02-02 11 views
0

共通の関数クラスがあります。基本的なもの、ちょうど私のプロジェクトで使用できるいくつかのクラスの機能があります。しかし、私はいくつかのクラスがいくつかのもののためにそれらを使用できるように構造体の配列を追加しようとしています。 Iveは別のクラス(クラス1)からこの構造体の配列を削除し、それらをCommonFunctionsクラスに追加しました。彼らは読まれるだけです。共通関数クラスに配列を追加する際のリンクエラー

しかし、イムは、エラーを取得:

CommonFunctions.obj:エラーLNK2005:(?子犬@@ 3PAUpup_file @@ A):*「構造体pup_file "構造体pup_file *子犬は" すでにClass1.obj エラーLNK2005に定義されています子犬」すでに

Class1.obj

で定義された致命的なエラーLNK1169(子犬@@ 3PAUpup_file @@ A?):一つ以上の多重定義されたシンボルはCommonFunctionsを使用するプロジェクト(に他のすべてのクラスに続いて

を見つけましたクラス、だから本当にすべて)

エラーLNK2005:(?子犬@@ 3PAUpup_file @@ A) "構造体pup_file *子犬は" すでに

誰もがここで起こっていただきまして、私を助けてMAIN.OBJで定義されていますか?

+1

いくつかのコードを見ると本当に役立ちます。私はヘッダ内の関数を定義していて、 "インライン"を使わないと思っています。 – Goz

+0

残念ながら、私は本当にコードをオンラインで投稿できません。しかし、ええ、私はヘッダーに定義しようとしています。私はちょうどそれをインライン化しようとしました:それは言う: 'インライン'はデータ宣言に許可されていません – discodowney

+0

固定。私は配列を静的にしなければならなかった。 Cos CommonFunctionsは、各インクルードで数回定義されていたファイルのロードで使用されていました。それを静的にすることは一度だけ行います。 (少なくとも私が集めているもの) – discodowney

答えて

0

ポインタpups(これは配列ではありません)をクラス定義内に宣言していないようです。
ヘッダーに入れてクラスの外に置くと、それらのようなエラーが発生します。

解決策はCommonFunctionsクラス定義内でpupsが宣言されていることを確認することです。

0

スタティックにするというコメントを読んだら、静的ではなくexternとして定義することをお勧めします。その定義を含むすべてがそのOWNコピーを取得することを意味します(つまり、コピーはすべてのファイルそれを含む)。

Externは、どこかのc/cppファイルで定義する必要がありますが、一度しか定義しないと、そのexternを含むコンパイルユニットは同じ構造を使用します。

実際には、各コンパイル単位に独自の変数のコピーが必要な場合があります。その場合、静的な設定が必要です。

関連する問題