フレンド機能は/複数の定義を再定義しました

  これは、複数の定義が行われている授業時間外のヘッダファイルにリンクして、この機能を実現するために、クラスのヘッダファイルにフレンド関数を宣言します

  溶液:フレンド関数の実装宣言インラインとして    又は    達成フレンド関数でCPPに

 

転送:https://www.cnblogs.com/fnlingnzb-learner/p/5890065.html 

私は==演算子は、構造をオーバーロードと思うので、最近のプロジェクトでは、しかし、私の影響は誤差の複数の定義で、その結果、ヘッダファイルを書き込むプロセスでオーバーロードされました。今要約ソリューションの下で:

まず第一に、最も重要な、ヘッダファイルにグローバル変数やグローバルなアプローチを定義していません!

1.各ヘッダー・ファイルは、条件付きコンパイルを追加します。
注:このメソッドは、問題を解決する方法が、複数の定義を解決する方法はありません。
同じヘッダファイルを含む複数のファイル、およびコンパイルされた条件を追加することなく、ファイルヘッダは、独立して解釈されたとき、その後、別のファイルは、各識別子について生成される生成します。ときに、コンパイラの接続ファイルは、同じ名前の変数を持っているので、それは二重定義エラーだったので、このプロジェクトは、一緒にすべてのシンボルを統合します。 
各ヘッダファイルを繰り返しているファイルが複数回参照されていることを説明を避けるために、条件付きコンパイルを追加するために、これが習慣であるべきです。このアプローチは、低レベルの問題のほとんどを解決するだろう。
条件付きコンパイルの例
TEST_H #ifndefの
に#define TEST_H
......
#endifの

2.グローバル変数を定義するにexternを使用してください:
あなたは、ヘッダーファイルGLOBAL.Hにすべてのグローバル変数を置くことができます(からランダムに名前が、条件付きコンパイルを追加するために)他のファイルでこれらの変数について、各フロントプラスのextern変数、声明定義されました。そして次にglobal.c、対応する.Cまたは.CPPファイルのヘッダファイル名を作成します。内のすべてのグローバル変数を宣言します。たとえばます。void(* Handl_Display)() ;
し、その後、グローバル変数に関連するファイルは「GLOBAL.H」が含まれてみましょう。だから、コンパイラは、コンパイラが実行可能ファイルを生成するための.oや他のファイルへのリンク、その後、global.c global.oのための最初のを生成します。
簡単に言えば、それは内.Cの変数の宣言の後、にextern変数を追加する前に、あります。

 

3.静的修正:
静的変数として宣言した変数の前に静的に追加します。
この方法は、複数の定義の問題を解決することができますが、それは他の問題を引き起こす可能性がありますが。
次のような質問があります:
三つのファイル、ああ、AC、BC、
ACとBCの両方ではああがあります。
変数の代入ああの途中で機能交流BCを呼び出しますが、実際にはまだBC変数が割り当てられていません。
分析:
静的な意味は、その変数を強制することですが、ファイルでのみ表示されます。 
;あなたは、ヘッダーファイル内の静的Xを定義すると仮定 
し、ヘッダファイルがACとBCを含まれている、
本質的には、ACとBCに、それぞれ、それには2つのxは何もXという名前の変数を定義していません。
ACでのxを変更し、彼は紀元前ここで、xの変化を引き起こすことはありません。

おすすめ

転載: www.cnblogs.com/Zhangyq-yard/p/10944793.html