我有三个文件: header.h
#ifndef _HEADER_
#define _HEADER_
int var = 0;
#endif
src1.cpp
#include "somefile.h"
extern int var;
int main(void) { // error: first defined here
var = 10;
return 0;
}
src2.cpp
#include "somefile.h"
extern int var;
int foo () { // error : multiple definition of 'var'
return 0;
}
我不知道为什么'extern'关键字在这种情况下无法使用。我该如何解决这些错误?
答案 0 :(得分:4)
声明
int var = 0;
在其中一个cpp文件中,而不是在头文件中
然后把
extern int var;
仅在头文件中
答案 1 :(得分:3)
你做错了。将extern
声明放在头文件中,每当需要变量时都包含它,并在一个源文件中定义它。
现在是,包含标题的每个源文件都有自己的定义,当您链接程序时,这些文件会相互冲突。
答案 2 :(得分:0)
我猜,somefile.h包含header.h。
当你想要改变你想要的变量时,就像你所做的那样,将变量放在一个非extern的一个地方。将该位置设为.c文件。如果它是一个头文件,它所包含的每个地方都会得到它自己的副本,导致“var'的多个定义”
移动
int var = 0;
进入其中一个src文件。