3

次のようなヘッダー ファイルで定義されている文字列の 2 つの配列があります。

#ifndef DRC_DefinesH
#define DRC_DefinesH
#include <string>
#include <System.hpp>
//---------------------------------------------------------------------------

std::string MagFields[] = {
   "SCAN", "EVENT", "EVENT2", "EVENT1", "EVENT3", "VECTORX", "VECTORY", "VECTORZ", "MAG1RAW", "MAG2RAW", "MAG3RAW",
   "MAG4RAW", "MAG1UNCOMP", "MAG2UNCOMP", "MAG3UNCOMP", "MAG4UNCOMP", "MAG1COMP", "MAG2COMP", "MAG3COMP", "MAG4COMP",
   "GRAD1", "GRAD2", "GRAD3", "UTC", "LAT", "LON", "ALT", "ANALOG1", "ANALOG2", "ANALOG3", "ANALOG4", "SYSTIME"};

std::string AnalogFields[] = {
   "SCAN", "EVENT0", "EVENT1", "EVENT2", "EVENT3", "ANALOG1", "ANALOG2", "ANALOG3", "ANALOG4", "ANALOG5", "ANALOG6",
   "ANALOG7", "ANALOG8", "ANALOG9", "ANALOG10", "ANALOG11", "ANALOG12", "ANALOG13", "ANALOG14", "ANALOG15", "ANALOG16",
   "ANALOG17", "ANALOG18", "ANALOG19", "ANALOG20", "ANALOG21", "ANALOG22", "ANALOG23", "ANALOG24", "ANALOG25",
   "ANALOG26", "ANALOG27", "ANALOG28", "ANALOG29", "ANALOG30", "ANALOG31", "ANALOG32"};

... other stuff

    #endif

このヘッダーには他にも多くのものが含まれており、C++ Builder XE2 プロジェクトのすべてのユニットに間接的に含まれています。プロジェクトをビルドすると、多くのリンカー警告が表示されます。

"public symbol _MagFields and _AnalogFields are defined in both modules AAA and BBB"

ここで、AAA と BBB は、プロジェクト内のすべてのユニットの組み合わせです。

これらの特定の宣言はユニットの実装側に移動でき、警告は消えますが、なぜそれが必要なのかを理解したいと思います。Embarcadero のドキュメントには、警告の意味ではなく、警告を取り除く方法が記載されているだけです。

4

1 に答える 1