我正在使用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数组,但我只知道运行时的值。你能告诉我如何找到这个问题的解决方案吗?
答案 0 :(得分:0)
静态数组需要编译时常量,因此第二个代码永远不会编译,因为在编译时不知道数组的大小。如果将arr声明为向量或动态数组会更好。
这是基本的C ++问题,建议您阅读初学者C ++书籍。
答案 1 :(得分:0)
您的代码的问题在于您将非常量表达式结果值(在运行时评估的值)分配给const变量,该变量的值必须是从常量表达式生成的值(在编译时)或文字中评估的值。
要解决此问题,您不应在const
中使用sizeOfArray
:
int sizeOfArray = appointmentVector.size();
此外,一旦解决了上述问题,您应该创建一个动态分配的数组:
unsigned int* arr = new unsigned int[sizeOfArray];
动态分配的数组允许您创建其元素数量可以来自运行时值的数组。
答案 2 :(得分:0)
常量表达式是编译器可以计算出的值的表达式。在C ++中,数组的大小是其类型的一部分,必须作为常量表达式给出。如果编译器无法确定表达式具有什么值,则不能将其用作数组类型的大小。你可以做的是在堆上分配一个“数组”并使用指向它的第一个元素的指针,就像你通常使用数组名一样。