重复的符号错误C ++

时间:2010-05-24 05:38:26

标签: c++

我在我的文件中添加了一些const字符,如下所示。我得到的错误是重复符号_xyz(说)。它有什么问题,我怎么能摆脱这个。

const char* xyz = "xyz";
class Abc
{
public:
    Abc()
    {
    }
};

4 个答案:

答案 0 :(得分:43)

如果这是在头文件中,则每次xyz时都会定义#include

您可以更改@R Samuel Klatchko所显示的声明。通常的方法(如果数据不是const)是这样的:

在Abc.h中:

extern char *xyz;

在Abc.cpp中:

char *xyz = "xyz";

已编辑添加

请注意,标题保护将解决此问题:

#ifndef XYZ_H
#define XYZ_H
...
#endif

标题保护可防止“重新定义”错误,其中相同的符号在同一编译单元中出现两次。这是一个编译器错误。

但即使使用标题保护,xyz的定义仍将出现在包含它的每个源文件中,从而导致“重复符号”错误,这是链接器错误。

如果原始海报当然提到过那会更有帮助。

答案 1 :(得分:9)

问题是包含头文件的每个源文件都会获得它自己的xyz副本以及外部链接。

解决这个问题的最简单方法是提供xyz内部链接。除了具有底层char的const:

之外,你可以通过使指针本身为const来实现
const char* const xyz = "xyz";

答案 2 :(得分:1)

我也遇到了这个问题,但是对我来说解决方案是不同的。我在头文件中放入了重载运算符(==,!=,<<)并实现了它们。这在其他我也使用==,!=或<<的文件中引起了问题。为了解决这个问题,我将实现移到了.cpp文件中,并将声明保留在头文件中。

答案 3 :(得分:-10)

请提供有关问题的有意义的说明。什么是“我的档案”?你正在采取什么“常量角色”?

对于您目前为止提供的内容,我只能猜测您将上述xyz的定义添加到头文件中,然后将其包含在多个翻译单元中。结果:对象xyz被定义了不止一次。因此错误。