我环顾四周,这个错误对我来说似乎有点奇怪。 我环顾了像<where do I convert?> warning C4244: 'initializing' : conversion from '__int64' to 'int', possible loss of data这样的线索,但是我的警告出现了(对于像我这样的noob)是由其他内容引起的。初始化从unsigned int64到unsigned int的转换
我有一个名为“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或其他任何东西。我希望它保持一个无符号的长整数。 除非arraySize不是要降级的项目。如果不是,那是什么? :/ 难道你不能使用int64类型创建一个数组吗?
的参数'运营商新的[]'必须是'size_t'。如果'size_t'等于'unsigned int',你会得到这个警告。 – Barmar 2014-10-27 16:15:32
'static_cast(arraySize)'很可能是你要找的东西,但老实说'arraySize'应该是一个'std :: size_t'开始(就像这整个动画可能会更好,只是'std: :vector '。 –
WhozCraig
2014-10-27 16:16:09
是的,使用size_t清除它 为什么?不允许程序分配超出此大小的数组? – 2014-10-27 16:19:25