首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >外部变量和数组声明问题c++

外部变量和数组声明问题c++
EN

Stack Overflow用户
提问于 2015-05-12 06:17:24
回答 3查看 1.7K关注 0票数 6

外挂变量和数组声明都有问题。如何使用不位于可声明文件中的全局变量声明数组。

file1.cpp

代码语言:javascript
运行
复制
const int size = 10;

mainfile.cpp

代码语言:javascript
运行
复制
extern const int size;

void main()
{
  int mas[size];
}
代码语言:javascript
运行
复制
int mas[size];

这条线有问题。能猜到吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-12 06:39:40

首先,常量有内部连接。因此,这些声明

代码语言:javascript
运行
复制
file1.cpp
const int size = 10;

代码语言:javascript
运行
复制
mainfile.cpp
extern const int size;

指不同的实体。

在file1.cpp中声明的常量在其相应的编译单元之外是不可见的。

按照C++标准(3.5程序和链接)

3具有命名空间作用域(3.3.6)的名称如果名称为 -一个非易失性变量,即显式声明const或,既未显式声明extern,也未先前声明为具有外部链接;或

在主文件中,未指定大小值,因此编译器将发出语句错误。

代码语言:javascript
运行
复制
int mas[size];

因为数组的大小应该是编译时常量表达式。

最简单的解决方案是将常量定义

代码语言:javascript
运行
复制
const int size = 10;

在某些常见的头文件中,该文件将包含在每个翻译单元中,其中有对常量的引用。

票数 3
EN

Stack Overflow用户

发布于 2015-05-12 06:19:51

数组大小必须是一个常量表达式;如果它是一个变量,那么该变量必须是const并在同一个转换单元中初始化,这样它的值就可以作为常量使用。

如果要在多个翻译单元之间共享该值,请在标题中定义该值并将其包括在内。

票数 6
EN

Stack Overflow用户

发布于 2015-05-12 06:23:14

C++不允许在运行时指定数组的大小。当然,在您的示例中,它是在链接时指定的,但这对编译器没有帮助。但是,如果您使用的是C++14编译器,并且在某些其他编译器(例如gcc)上可以这样做,但是它比动态分配内存的可移植性更低,而且比std::vector<>更方便。

参考:https://isocpp.org/wiki/faq/freestore-mgmt#dynamic-array-len

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30183183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档