0

我有三个文件: 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”关键字。我该如何解决这些错误?

4

3 回答 3

4

把声明

int var = 0;

在其中一个 cpp 文件中,而不是在头文件中

并把

extern int var;

仅在头文件中

于 2013-03-26T15:58:10.537 回答
3

你做错了。将extern声明放在头文件中,在需要变量时包含它,并在一个源文件中定义它。

是不是现在,每个包含你的头文件的源文件都有自己的定义,当你链接你的程序时,它们会相互冲突。

于 2013-03-26T15:57:53.613 回答
0

让我猜猜,somefile.h 包含 header.h。

当您将一个变量外部化时,正如您所做的那样,让该变量恰好在一个地方是非外部的。将该位置设为 .c 文件。如果它是一个头文件,它所包含的每个地方都会有自己的副本,导致“'var'的多个定义”

移动

int var = 0;

进入其中一个 src 文件。

于 2013-03-26T15:58:55.750 回答