矢量大小错误的无符号 int 数组

unsigned int array from vector size error

本文关键字:无符号 int 数组 错误      更新时间:2023-10-16

我正在使用C++生成器,并且在将const int变量设置为向量大小方面得到了一些帮助。

这是我有效的代码,只是为了向您展示什么是有效的:

vector<appointment> appointmentVector = calCalendar.getAllAppointments();
const int sizeOfArray = 5;
unsigned int arr[sizeOfArray];

如果我将代码修改为以下内容:

vector<appointment> appointmentVector = calCalendar.getAllAppointments();
const int sizeOfArray = appointmentVector.size();
unsigned int arr[sizeOfArray];

我收到以下错误:

[BCC32 错误] 评估2.cpp(357):E2313 需要常量表达式

我可以得到一些帮助吗?

更新

我问这个问题是因为我在以下代码中遇到问题:

unsigned int arr[2] = {1,8};
unsigned int days;
TMonthCalendar->BoldDays(arr, 1, days);
MonthBoldInfo = days;

BoldDays 方法需要一个无符号的 int 数组,但我只知道运行时的值。你能告诉我如何找到解决这个问题的方法吗?

静态数组需要编译时常量,因此第二个代码永远不会编译,因为在编译时数组的大小是未知的。最好将 arr 声明为向量或动态数组。

这是基本C++问题,建议您阅读初学者C++书。

代码的问题在于,您将非常量表达式结果值(运行时计算的值)分配给 const 变量,该变量的值必须是从常量表达式生成的值(编译时计算的值)或文本。

要解决此问题,您不应在sizeOfArray中使用const

int sizeOfArray = appointmentVector.size();

另外,一旦解决了上面的问题,你应该创建一个动态分配的数组

unsigned int* arr = new unsigned int[sizeOfArray];

动态分配的数组允许您创建其元素数可以来自运行时值的数组。

常量表达式是编译器可以计算出其值的表达式。在C++数组的大小是其类型的一部分,必须作为常量表达式给出。如果编译器无法确定表达式具有的值,则不能将其用作数组类型的大小。 您可以做的是在堆上分配一个"数组",并使用指向其第一个元素的指针,就像通常使用数组名称一样。