外挂变量和数组声明都有问题。如何使用不位于可声明文件中的全局变量声明数组。
file1.cpp
const int size = 10;
mainfile.cpp
extern const int size;
void main()
{
int mas[size];
}
int mas[size];
这条线有问题。能猜到吗?
发布于 2015-05-12 06:39:40
首先,常量有内部连接。因此,这些声明
file1.cpp
const int size = 10;
和
mainfile.cpp
extern const int size;
指不同的实体。
在file1.cpp中声明的常量在其相应的编译单元之外是不可见的。
按照C++标准(3.5程序和链接)
3具有命名空间作用域(3.3.6)的名称如果名称为 -一个非易失性变量,即显式声明const或,既未显式声明extern,也未先前声明为具有外部链接;或
在主文件中,未指定大小值,因此编译器将发出语句错误。
int mas[size];
因为数组的大小应该是编译时常量表达式。
最简单的解决方案是将常量定义
const int size = 10;
在某些常见的头文件中,该文件将包含在每个翻译单元中,其中有对常量的引用。
发布于 2015-05-12 06:19:51
数组大小必须是一个常量表达式;如果它是一个变量,那么该变量必须是const
并在同一个转换单元中初始化,这样它的值就可以作为常量使用。
如果要在多个翻译单元之间共享该值,请在标题中定义该值并将其包括在内。
发布于 2015-05-12 06:23:14
C++不允许在运行时指定数组的大小。当然,在您的示例中,它是在链接时指定的,但这对编译器没有帮助。但是,如果您使用的是C++14编译器,并且在某些其他编译器(例如gcc)上可以这样做,但是它比动态分配内存的可移植性更低,而且比std::vector<>更方便。
参考:https://isocpp.org/wiki/faq/freestore-mgmt#dynamic-array-len
https://stackoverflow.com/questions/30183183
复制相似问题