инициализация преобразования из unsigned int64 в unsigned int

Я огляделся вокруг, и эта ошибка кажется мне немного странной.
Я посмотрел вокруг на темы, как <куда мне конвертировать?> предупреждение C4244: «инициализация»: преобразование из «__int64» в «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» — это тип unsigned 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’ был понижен до беззнаковых int, int, short или чего-либо еще. Я хочу, чтобы он оставался без подписи надолго.
Если arraySize не является элементом, понижающим рейтинг. Если нет, то что? : /
Вы не можете создать массив, используя тип int64?

0

Решение

Вы применяете длинный без знака длинный длинный без знака, что очень мало помогает в устранении предупреждения.

Вы должны сделать это, чтобы привести его к соответствующему размеру целого числа.

InternalArray* copyArray = new InternalArray[static_cast<size_t>(arraySize)];
0

Другие решения


По вопросам рекламы [email protected]