2

我正在为 HP-UX 和 Linux 编写一个跨平台的 C++ 应用程序。我想知道如何在文件 3 内的文件 1 中使用声明的 const char * 变量而不会弹出以下错误:

/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,并且编译只会尝试引入您的变量或代码一次。

[原创] 我一直能够通过在头文件中的声明上使用关键字 extern 来做到这一点,然后在我的 c 源文件中真正“定义”变量。

即使您必须从多个源文件(即 header1.h 包含在 source1.c、source2.c 和 source3.c 中)引用同一个变量,这也应该有效。

这也是您在 C++ 中执行此操作的方式(即使我的示例引用 .c 文件而不是 cpp 文件)

于 2012-06-25T18:48:48.597 回答