2

HP-UXおよびLinux用のクロスプラットフォームC++アプリケーションを作成しています。次のエラーがポップアップすることなく、ファイル3内のファイル1で宣言されたconstchar*変数をどのように使用できるのか疑問に思いました。

/usr/ccs/bin/ld: Duplicate symbol "OPERATING_SYSTEM" in files smac_dictionary.o and smac_dsl_parser.o
/usr/ccs/bin/ld: Found 1 duplicate symbol(s)
gmake: *** [smac_dsl_parser] Error 1

ありがとう。

4

1 に答える 1

3

[編集1]

#define への参照を見ました。彼が意味することは、ヘッダーファイルでこれを行うことです(myDeclare.h):

#ifndef __YOURNAMEHERE__
#define __YOURNAMEHERE__

// All of your declarations here
extern const char * myVar[6];

#endif

myDeclare.c または cpp で

const char * myVar[6] = {'a', 'b', 'c', 'd', 'e', 'f'};

これで myDeclare.h をどこにでもインクルードできるようになり、コンパイルは変数またはコードを 1 回だけ取り込もうとします。

[オリジナル] これは、ヘッダー ファイル内の宣言で extern キーワードを使用して、c ソース ファイル内で変数を真に「定義」することで常に実現できました。

これは、複数のソース ファイルから同じ変数を参照する必要がある場合でも機能するはずです (つまり、header1.h が source1.c、source2.c、および source3.c に含まれています)。

これは、C++ で行う方法でもあります (私の例では cpp ファイルではなく .c ファイルを参照していますが)。

于 2012-06-25T18:48:48.597 に答える