当编译器报告重复符号的错误时,通常意味着在多个源文件中定义了相同的全局符号(变量或函数)。这可能是由于以下原因引起的:
#ifndef
,#define
和#endif
)来避免重复包含。示例:
#ifndef MY_HEADER_H
#define MY_HEADER_H
// 声明全局变量或函数
#endif
extern
(只有声明),然后在一个源文件中进行实际定义。示例:
文件1.cpp:
int myGlobalVariable; // 只声明,不定义
文件2.cpp:
extern int myGlobalVariable; // 声明,表示在其他地方有定义
static
(仅在当前源文件中可见)或使用头文件和分离编译的方法。示例:
文件1.cpp:
void myFunction(); // 函数声明
文件1.cpp:
void myFunction() {
// 函数定义
}
确保正确地包含和声明全局变量和函数,并避免在多个源文件中进行重复定义,可以解决链接器报告重复符号的问题。