我环顾四周,这个错误对我来说似乎有点奇怪。我查看了诸如<where do I convert?> warning C4244: 'initializing' : conversion from '__int64' to 'int', possible loss of data 之类的线程,但我的警告出现(对于像我这样的菜鸟)是由别的东西引起的。
我有一个名为“DArray.h”的头文件,它为动态数组定义并实现了一个模板类。内部数组如下所示:
struct InternalArray
{
T element;
bool isAssigned;
void Assign(const T& in)
{
element = in;
isAssigned = true;
}
InternalArray()
{
isAssigned = false;
}
};
InternalArray* internalArray;
其中 T 是整个 DArray 类的模板类型。
每当我需要调整该内部数组的大小时,我的警告就会出现,方法是制作它的临时副本,如下所示:
InternalArray* copyArray = new InternalArray[arraySize];
其中“arraySize”是一个无符号的 long long 类型。对我来说,它似乎只允许我使用 unsigned int 类型创建一个数组,并且当我尝试制作这样的副本时会自动降级“arraySize”。我也试过:
InternalArray* copyArray = new InternalArray[dynamic_cast<unsigned long long>(arraySize)];
但是我被告知 __int64 是 dynamic_cast 的无效类型。我也试过
InternalArray* copyArray = new InternalArray[static_cast<unsigned long long>(arraySize)];
但是,这根本不会影响警告!我也尝试过 C 风格的演员表。啊,我希望我不是那么愚蠢。据我所知,这些警告不是致命的,但也有点令人担忧。有人可以向我解释一下我打电话给这条线时到底发生了什么吗?如果您有解决方案,完全欢迎!
我应该说清楚:我不希望 'arraySize' 被降级为 unsigned int、int、short 或其他任何东西。我希望它保持为 unsigned long long。 除非 arraySize 不是被降级的项目。如果不是,那是什么?:/ 是不是不能使用 int64 类型创建数组?