从矢量大小错误的unsigned int数组

时间:2012-10-11 04:47:03

标签: c++ vector int unsigned

我正在使用C ++ Builder,并且在将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错误] Assessment2.cpp(357):E2313需要常量表达式

我可以请一点帮忙吗?

更新

我问这个问题,因为我遇到以下代码问题:

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

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

int sizeOfArray = appointmentVector.size();

此外,一旦解决了上述问题,您应该创建一个动态分配的数组

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

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

答案 2 :(得分:0)

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