C++ 头文件层次结构中的extern变量

C++ 头文件层次结构中的extern变量,c++,extern,C++,Extern,为什么我不能访问file.cpp文件中定义的变量值。假设它与main链接。棘手的是,变量值是间接包含的。Main函数包括header1.h,而header1.h反过来包括file.h,该文件的变量值为extern。 外部可以像这样在头链中传播吗 1) 文件.h 2) file.cpp 3) 校长1.h #include "file.h" const int const_value = 100; 4) main.cpp 是的,extern可以通过这种方式传播。编译器只需要看到变量在使用点声明为e

为什么我不能访问file.cpp文件中定义的变量值。假设它与main链接。棘手的是,变量值是间接包含的。Main函数包括header1.h,而header1.h反过来包括file.h,该文件的变量值为extern。 外部可以像这样在头链中传播吗

1) 文件.h

2) file.cpp

3) 校长1.h

#include "file.h"
const int const_value = 100;
4) main.cpp


是的,
extern
可以通过这种方式传播。编译器只需要看到变量在使用点声明为
extern
,通过哪个标头并不重要。头文件的内容仅由预处理器粘贴在源文件的顶部。因此编译器甚至不知道头文件

但是,最好将编译源文件所需的所有头文件独立地包含在该头文件中。维护这样的代码要容易得多


简单地说,将
file.h
包含在
main.cpp
中,对于代码的读者来说,这将更加直观。

虽然这似乎是对一般情况的合理建议,但我不相信,当你超越人为的例子时。@LightnessRacesinOrbit:我同意。总有一个权衡。即使是标准的库头也会间接地包含很多头。您会得到什么错误?是否确实将file.cpp和main.cpp中的对象都提供给链接器?
#include "file.h"
int value = 25;
#include "file.h"
const int const_value = 100;
#include "header1.h"
int main(char *argv[], int args) {
int result = value*10;      
    return result;
}