在三个src文件中使用extern

时间:2013-03-26 15:55:53

标签: c++ c extern

我有三个文件: 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'关键字在这种情况下无法使用。我该如何解决这些错误?

3 个答案:

答案 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文件。