gamecreator Wrote:если хочешь, то вектор. особенно вектор векторов - это вообще зло. и все лишь для того, чтобы создать двумерный массив неизвестного заранее размера. а вся функциональность вектора будет висеть мертвым грузом. ладно бы еще vector<bool>, тут какая-нибудь экономия памяти еще пригодилась бы. возможно.
Неужели ты хочешь, чтобы я рассказывал Пакке про работу с указателями и адресную арифметику, дабы он смог нормально писать свои функции для работы с многомерными массивами? Он же всего этого ещё не поймёт. Или, что ещё хуже, рассказывать ему про
boost::multi_array? Юзать вектор - самое оптимальное для него решение: он и интуитивно понятен, и синтаксис обращения к элементу у него такой же, как в C
(не рассказывать же Пакке про итераторы, в конце концов).
packa Wrote:Почему_данный_код_не_работает!
Я просто не могу понять что в нем может быть не правильно... Перепробовал, кажется, все
Частично я уже указал тебе на твою ошибку, смотри пункт 3 моих рекомендаций. Ты не заполняешь в массиве
bh элементы вида
bh[i][0] числами, и поэтому они принимают значение по умолчанию - то бишь 0. Поэтому, строчка с
case 0 всегда срабатывает уже для самого первого элемента массива
bh (то бишь, для
bh[0][0]). А что в ней происходит? Ты пытаешься
(через указатель) обратиться к элементу, который ещё не создан! Ты создаёшь его лишь ниже, командой
Img[i]=new TImage(this);
Вот в этом всё и дело. Учти, что "создание указателя на объект" - вовсе не то же самое, что "создание объекта". Указатель может указывать и в "пустоту", как в твоём случае. А "изображение" - это уже объект. Ты же пытаешься обратиться к объекту через указатель
(путём вызова компонентной функции LoadFromFile), а сам объект создаёшь лишь после этого. Вот где собака зарыта...
P.S. Что не отменяет того факта, что весь твой код лучше переписать