我已经环顾四周,这个错误对我来说有点奇怪。 我查看了<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类型。 对我来说,它似乎只允许我使用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或其他任何内容。我希望它能够作为一个无条件的长期保持。 除非arraySize不是降级的项目。如果不是,那是什么? :/ 您是否无法使用int64类型创建数组?
答案 0 :(得分:0)
您正在将无符号长long转换为无符号长long,这对帮助解决警告几乎没有帮助。
您需要执行此操作以将其强制转换为适当的大小整数
InternalArray* copyArray = new InternalArray[static_cast<size_t>(arraySize)];