我在我的文件中添加了一些const字符。我得到的错误是重复的符号_xyz(说)。它有什么问题,我怎么能摆脱这一点。重复的符号错误C++
const char* xyz = "xyz";
class Abc
{
public:
Abc()
{
}
};
我在我的文件中添加了一些const字符。我得到的错误是重复的符号_xyz(说)。它有什么问题,我怎么能摆脱这一点。重复的符号错误C++
const char* xyz = "xyz";
class Abc
{
public:
Abc()
{
}
};
如果这是一个头文件,你在你每次#include
它定义xyz
。
您可以将声明更改为@R Samuel Klatchko所示。通常的方式(如果该数据不是const
)是这样的:
在Abc.h:
extern char *xyz;
在Abc.cpp:
char *xyz = "xyz";
编辑补充
请注意,标头警卫将不是解决此问题:
#ifndef XYZ_H
#define XYZ_H
...
#endif
标题保护可防止“重新定义”错误,其中相同的符号在同一个编译单元中出现两次。这是一个编译器错误。
不过,即使头守卫的xyz
定义仍然会出现在包括它的每一个源文件,造成“重复的符号”错误,这是一个连接错误。
如果原始海报当然提到过,那将会更有帮助。
请提供一个有意义的问题描述。什么是“我的文件”?你正在考虑什么“常量字符”?
对于您所提供的内容,我只能猜测您将xyz
的上述定义添加到头文件中,然后将其包含到多个翻译单元中。结果:对象xyz
被定义了多次。因此错误。
问题是包含头文件的每个源文件都会通过外部链接获取它自己的xyz
副本。
解决这个问题的最简单方法是给xyz
内部链接。你可以做到这一点使得指针本身是常量,除了具有基本字符的常量:
const char* const xyz = "xyz";
+1这是最好的解决方案。 'const'总是很好。 – 2010-05-24 07:06:08
const绝对是好的,但这只是隐藏了现在每个文件都有相同数据的实例的问题。 – 2010-05-24 14:54:48
声明一个变量多次是不是一个错误(如果它是不一样的翻译单元内)。定义它是。 – 2013-12-09 06:21:21
我应该抓住这一点,谢谢。 – egrunin 2013-12-09 17:39:33
感谢球队后卫的澄清。这是一件很奇怪的事情 - 如果我在头文件中定义了一个函数,我只会得到重复符号的链接器错误。在我目前的情况下,我有一堆常量和一些头函数中定义的函数 - 我只为函数获取链接器错误,const的确定。这是为什么? – 2017-05-04 12:23:28