Я огляделся вокруг, и эта ошибка кажется мне немного странной.
Я посмотрел вокруг на темы, как <куда мне конвертировать?> предупреждение 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?
Вы применяете длинный без знака длинный длинный без знака, что очень мало помогает в устранении предупреждения.
Вы должны сделать это, чтобы привести его к соответствующему размеру целого числа.
InternalArray* copyArray = new InternalArray[static_cast<size_t>(arraySize)];