我想在标题中定义一个变量并能够在多个文件中使用它。例如,在a
某处定义了变量,并且能够在 p1.cpp 和 p2.cpp 中使用/更改它
这是一个示例,其中包含我正在尝试做的 3 个简单文件。
// vars.hpp
#ifndef VARS_HPP
#define VARS_HPP
int a = 1;
float b = 2.2;
void double_vars();
#endif
// vars.cpp
#include "vars.hpp"
void double_vars () {
a *= 2;
b *= 2;
}
// vars_main.cpp
#include <cstdio>
#include "vars.hpp"
int main () {
printf("a: %d; b: %f\n", a, b);
double_vars();
printf("a: %d; b: %f\n", a, b);
}
现在,编译上面的内容:
g++ -Wall -W -g vars.cpp vars_main.cpp -o vars && ./vars
给我以下错误:
/tmp/ccTPXrSe.o:(.data+0x0): multiple definition of `a'
/tmp/ccnc1vof.o:(.data+0x0): first defined here
/tmp/ccTPXrSe.o:(.data+0x4): multiple definition of `b'
/tmp/ccnc1vof.o:(.data+0x4): first defined here
有人可以向我解释为什么会这样吗?据我所知,我在头文件中有警卫,它应该只包含一次,所以不应该有多个声明