这个链接器错误“多重定义”通常发生在编译过程中,当同一个符号(在这个例子中是fnames
)在多个源文件中被定义时。链接器无法确定应该使用哪个定义,因此会抛出错误。
.o
文件)中被定义。extern
关键字:static
关键字:static
,这样它的作用域就被限制在该文件内。static
,这样它的作用域就被限制在该文件内。static
,但提供了更好的封装。static
,但提供了更好的封装。假设我们有两个源文件main.cpp
和utils.cpp
,以及一个头文件utils.h
。
// utils.h
#ifndef UTILS_H
#define UTILS_H
extern int fnames; // 声明
#endif // UTILS_H
// utils.cpp
#include "utils.h"
int fnames = 0; // 定义
// main.cpp
#include "utils.h"
#include <iostream>
int main() {
std::cout << "fnames: " << fnames << std::endl;
return 0;
}
确保使用正确的编译命令来链接所有目标文件:
g++ main.cpp utils.cpp -o myprogram
通过上述方法,可以有效避免“多重定义”的链接器错误。
领取专属 10元无门槛券
手把手带您无忧上云