gpt4 book ai didi

c++ - 为什么不能使用外部常量定义数组?

转载 作者:行者123 更新时间:2023-11-30 01:56:06 25 4
gpt4 key购买 nike

我不太明白在 C++ 中使用 externconst 关键字背后的概念。

我已经阅读了一些关于这个主题的相关问题(见下文),但到目前为止我还没有掌握如何将它们一起使用。

相关问题:

好吧,以下面的程序代码为例:

dConst.hpp

extern const int NUM_GENERATORS;    // Number of generators in power plant

extern const int generatorID[NUM_GENERATORS]; // Generator ID numbers
extern const bool generatorStatus[NUM_GENERATORS]; // Generator Status

vConst.cpp

const int NUM_GENERATORS = 4;       // Generators in Power Plant

const int generatorID[NUM_GENERATORS] = // Generator ID numbers
{
23, 57, 49, 106
};
const bool generatorStatus[NUM_GENERATORS] = // Production status ( online? )
{
true, false, false, true
};

main.cpp

#include <iostream>
#include "dConst.hpp"

using std::cout;
using std::cin;
using std::endl;

// ----====< M A I N >====----
int main()
{
for ( int iGenerator = 0; iGenerator < NUM_GENERATORS; iGenerator++ )
{
cout << "Generator ";
cout << generatorID[iGenerator];

if ( generatorStatus[iGenerator] )
cout << "is running." << endl;
else
cout << "is offline!" << endl;
}

cout << "Press ENTER to EXIT:";
cin.get(); // Stop

return 0;
}

我无法使用 NUM_GENERATORS 来声明我的包含发电机 ID 和状态的数组。我在顶部包含了外部定义:#include "dConst.hpp。根据我在这里阅读的一些 StackOverflow 问题(可能不够仔细),编译器和链接器应该能够找到 vConst.cpp 中定义的值,并继续他们的快乐之路。

那么他们为什么不这样做呢?

最佳答案

链接器可以找到它,但编译器不能,因为它在不同的编译单元中。编译器需要在编译时知道数组的大小,但只有在常量声明为 extern 时才会在链接时知道。

关于c++ - 为什么不能使用外部常量定义数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com