我在我的文件中添加了一些const字符.我得到的错误是重复符号_xyz(说).它有什么问题,我怎么能摆脱这个问题.
const char* xyz = "xyz";
class Abc
{
public:
Abc()
{
}
};
Run Code Online (Sandbox Code Playgroud)
egr*_*nin 47
如果这是在头文件中,那么xyz每次都是这样定义的#include.
您可以更改@R Samuel Klatchko所显示的声明.通常的方式(如果数据不是const)是这样的:
在Abc.h中:
extern char *xyz;
Run Code Online (Sandbox Code Playgroud)
在Abc.cpp中:
char *xyz = "xyz";
Run Code Online (Sandbox Code Playgroud)
编辑添加
请注意,标题保护不会解决此问题:
#ifndef XYZ_H
#define XYZ_H
...
#endif
Run Code Online (Sandbox Code Playgroud)
标题保护会阻止"重定义"错误,其中相同的符号在同一编译单元中出现两次.这是一个编译器错误.
但即使使用标题保护,xyz仍然会在包含它的每个源文件中出现定义,从而导致"重复符号"错误,这是链接器错误.
如果原始海报当然提到过那会更有帮助.
Eri*_*ner 10
我也遇到了这个问题,但对我来说解决方案是不同的。我在头文件中放置了重载运算符(==、!=、<<)并实现了它们。这在我也使用 ==、!= 或 << 的其他文件中引起了问题。为了解决这个问题,我将实现移到 .cpp 文件中,并将声明留在头文件中。
编辑:
如果出现以下情况,也可能会导致这种情况:
.cpp文件而不是.h文件。您可以通过将导入切换为使用.h而不是.cpp..cpp文件中来解决此问题(以及其他解决方案)。问题是包含头文件的每个源文件都有自己的xyz外部链接副本.
解决这个问题的最简单方法是提供xyz内部联系.除了具有底层char的const之外,你可以通过使指针本身为const来做到这一点:
const char* const xyz = "xyz";
Run Code Online (Sandbox Code Playgroud)