我在我的文件中添加了一些const字符,如下所示。我得到的错误是重复符号_xyz(说)。它有什么问题,我怎么能摆脱这个。
const char* xyz = "xyz";
class Abc
{
public:
Abc()
{
}
};
答案 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 char* const xyz = "xyz";
答案 2 :(得分:1)
我也遇到了这个问题,但是对我来说解决方案是不同的。我在头文件中放入了重载运算符(==,!=,<<)并实现了它们。这在其他我也使用==,!=或<<的文件中引起了问题。为了解决这个问题,我将实现移到了.cpp文件中,并将声明保留在头文件中。
答案 3 :(得分:-10)
请提供有关问题的有意义的说明。什么是“我的档案”?你正在采取什么“常量角色”?
对于您目前为止提供的内容,我只能猜测您将上述xyz
的定义添加到头文件中,然后将其包含在多个翻译单元中。结果:对象xyz
被定义了不止一次。因此错误。