基本上我想在另一个文件的std :: array中使用一个全局常量。在std :: array中使用的C++ 11中的全局常量
我知道这个全局变量问题已经在这里被多次询问了。例如,这样一句: Defining global constant in C++
和个人我更喜欢使用方法5或6:
5:const int的GLOBAL_CONST_VAR = 0xFF的;
6:extern const int GLOBAL_CONST_VAR;并在一个源文件中const int GLOBAL_CONST_VAR = 0xFF;
我的项目需要很多常量,比如太阳常数。有些用于std :: array,例如nvegetation_type,nrock_type。
我以前使用方法5,所以只有一个头用于所有其他源文件。但多个定义问题出现类似于: Multiple definition and header-only libraries 这里: Why aren't my include guards preventing recursive inclusion and multiple symbol definitions?
但这样子在我的Visual Studio C++项目不是一个问题,我不知道为什么呢。我在Linux下使用makefile并编译。
然而,当我使用方法6和C++ 11作为
extern const int nvegetation_type ;
const std::array< double, nvegetation_type > some_variable
= { { 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1} };
我将获得像误差限定在其他源头文件数组:
error C2065: 'nvegetation_type': undeclared identifier.
我假定当我使用头/源方法,我不能直接交叉引用全局变量,至少对于std :: array。 我读了一些类似的链接,但没有人提到过这个(也许我的搜索是不吉利的)。 http://www.learncpp.com/cpp-tutorial/42-global-variables/ 那么解决方案是什么?
我不知道你在问什么。 –
我会想这个错误是'未定义的标识符'而不是'未声明的标识符'? – lfgtm
它确实看起来像一个奇怪的诊断(即使问题不是联系,所以你建议的选择不太对) –