为什么我不能使用外部常量定义数组? 我不太理解C++中使用Extn和const关键字的概念。
我已经阅读了一些关于这个主题的相关问题,见下文,但到目前为止,我还没有掌握如何将它们结合起来使用 相关问题: 好的,以下面的程序代码为例: dConst.hpp 外部常量int NUM_生成器;//发电厂的发电机数量 外部常量int generatorID[NUM_GENERATORS];//发电机ID号 外部常量布尔生成器状态[NUM_生成器];//发电机状态 vConst.cpp const int NUM_生成器=4;//发电厂发电机 const int generatorID[NUM_GENERATORS]=//生成器ID号 { 23, 57, 49, 106 }; const bool GENERATORS status[NUM_GENERATORS]=//生产状态在线? { 真,假,假,真 }; main.cpp 包括 包括dConst.hpp 使用std::cout; 使用std::cin; 使用std::endl; //--=为什么我不能使用外部常量定义数组? 我不太理解C++中使用Extn和const关键字的概念。,c++,arrays,constants,extern,C++,Arrays,Constants,Extern,我已经阅读了一些关于这个主题的相关问题,见下文,但到目前为止,我还没有掌握如何将它们结合起来使用 相关问题: 好的,以下面的程序代码为例: dConst.hpp 外部常量int NUM_生成器;//发电厂的发电机数量 外部常量int generatorID[NUM_GENERATORS];//发电机ID号 外部常量布尔生成器状态[NUM_生成器];//发电机状态 vConst.cpp const int NUM_生成器=4;//发电厂发电机 const int generatorID[NUM_
在您演示的情况下,您正在使用“extern”关键字告知编译器,已定义符号的值是在与此源生成的对象不同的对象中定义的。这会告知编译器生成导入此符号的对象。然后,链接器负责将导入/导出的符号与m对象。因此,当编译器运行时,您要查找的值不可用,因为它依赖于来自另一个对象的外部符号,而该对象当时可能尚未生成。编译器无法知道符号的值,因此无法使用它。Pollex先生完全正确,但我我想我可以扩展一下他的答案,这样将来寻找这些信息的人可能会有一个更完整的图景。现代IDE通常会掩盖将源代码转换为可执行二进制代码所涉及的多个部分 广义地说,C/C++编译器只处理文本文件源文件。编译器读取这些文件,解析它们并输出目标文件。目标文件包含二进制可执行部分和符号部分。然后链接器运行,将各种二进制目标文件“链接”到单个可执行文件中。它通过匹配符号requ用可用的符号表示
在您演示的情况下,您正在使用“extern”关键字告知编译器,已定义符号的值是在与此源生成的对象不同的对象中定义的。这会告知编译器生成导入此符号的对象。然后,链接器负责将导入/导出的符号与m对象。因此,当编译器运行时,您要查找的值不可用,因为它依赖于另一个对象的外部符号,而该对象当时可能还没有生成。编译器无法知道符号的值,因此无法使用它。因此我需要包含声明n将vConst.cpp中的那些常量添加到main.cpp中。但是,如果我必须在另一个源文件(如powerPlant.cpp)中使用这些相同的常量,我会不会最终重新声明这些常量?因此我需要将vConst.cpp中这些常量的声明添加到main.cpp中。如果我必须在另一个源文件中使用这些相同的常量但是,我不是要重新声明这些常量吗?