矢量大小错误的无符号 int 数组
unsigned int array from vector size error
我正在使用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++数组的大小是其类型的一部分,必须作为常量表达式给出。如果编译器无法确定表达式具有的值,则不能将其用作数组类型的大小。 您可以做的是在堆上分配一个"数组",并使用指向其第一个元素的指针,就像通常使用数组名称一样。
相关文章:
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 是否可以将无符号 int 的最大值转换为 int 并将结果转换为 -1?
- 为什么QByteArray的大小是"int"而不是"无符号int"
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 使用无符号int作为二进制来在c++中实现一个集
- C++如何将变量传递给带有无符号 int & 的参数uint16_t函数?
- 为什么我不能使用在 Visual C++ 32 位中实现运算符无符号 int() 作为数组索引的类?
- 视觉C++转换和写入值为 10 的无符号 int 给出 5 个字节
- uint8_t在转换为无符号 int 时未打印正确的值
- G++ 错误:重载的"abs(无符号 int)"的调用不明确
- 将 3D 矢量浮点打包到无符号 int 中并将其解压缩
- 如何使用 JNI 将 double 和无符号 int 从本机 c 库返回到 java
- 为什么printf和cout为此无符号int提供了不同的输出
- memcpy 从无符号字符 * 到无符号 int
- C++ 重载与有符号和无符号 int 不同
- 创建具有未定义溢出的无符号 int
- 将大双精度转换为无符号 int 期间堆栈损坏
- 错误:成员引用基类型"uint32_t"(也称为"无符号 INT")不是结构或联合
- 无符号int的比较始终是正确的(NPOS问题?)