1

我环顾四周,这个错误对我来说似乎有点奇怪。我查看了诸如<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 类型创建数组?

4

1 回答 1

0

您将 unsigned long long 转换为 unsigned long long,这对解决警告几乎没有帮助。

您需要这样做才能将其转换为适当的大小整数

InternalArray* copyArray = new InternalArray[static_cast<size_t>(arraySize)];
于 2014-10-27T16:08:44.630 回答