| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > запись значений StringGrid в динамические массивы |
| Автор: wolver17 22.11.2011, 23:53 | ||
| Такая вот проблемка: необходимо считать в два динамических массива значения столбцов компонента StringGrid2, состоящего из 2-х столбцов произвольной длины. (В конце, для проверки что всё норм, вывожу эти же массивы в другой - StringGrid1). На форме такие компоненты: StringGrid1, StringGrid2, Edit1, CheckBox1, BitBtn1.
код работает, и 1-й массив прекрасно записывается/считуется, а вот 2-й... в общем вот что на скрине: http://ipicture.ru/Gallery/View/6975512.html подскажите, пожалуйста, что не так? |
| Автор: MAXIQ 24.11.2011, 16:57 | ||
Вроде работает...
|
| Автор: XPyCT 25.11.2011, 08:30 | ||||||
Для чего вы создаете динамический массив если
n - вы явно присваиваете значение 4 (размер массива); не лучше уж сделать так
а далее уже как у вас написано
Динамический массив по ходу для того и создают когда не знаешь сколько записей в таблице |
| Автор: wolver17 29.11.2011, 00:38 |
| я вроде разобрался с проблемой, только решение создаёт другую проблему) создавая массивы функцией new, прога ж не знает размер массив т.к. они динамические, и получает их после ввода значения n уже при работе проги. И я проверял в обычном Borland C++, если cin>>n; делать после объявления массива, а не до - то подобные глюки с потерей значений в массиве происходят, а если делать ввод а потом объявление, т.е. как надо - то всё норм. Так вот, проблемка в том что мне мои массивы нужны потом для расчётов в моих ф-циях, и я не могу их описать локально. Как же тогда исправить глюк или заставить элементы записываться правильно? (или я чего-то не знаю, и можно передавать пользовательские переменные в стандартные ф-ции, где параметр только скажем TObject *Sender?) |
| Автор: MAXIQ 5.12.2011, 09:56 |
| Мда.. или я совсем туплю или Вы уважаемый чего-то не договариваете по поводу cin>>n... Так у тебя проект в BCB и ты используешь формы и стандартные элементы управления? Или ты чего-то консольное творишь? Тестовую переменную с инициализацией я специально оставил для наглядности int n=4...; Указатель на массив нужно объявить глобально. new и delete вызывать только один раз.. на создании (Create) и (Destroy) соответственно. А дальше, если это нужно, можешь изменять его размерность, записывать, перезаписывать, в общем глумиться как хочешь написав свою функцию обработки в которую можно передавать в качестве аргумента тот самый глобальный указатель на массив, а ее уже вызывать из различных событий элементов управления "где параметр только скажем TObject *Sender")))))). Таким макаром у тебя и данные из массива будут всегда под рукой, и код короче.... до поры до времени))). А лучше возьми книжку в руки и еще разок динамическое выделение памяти почитай.. и желательно не ту что уже читал, а другую.. вопросы сами отвалятся. |
| Автор: wolver17 6.12.2011, 20:49 | ||||||
сорри, только сейчас увидел, что это было не мне адресовано, а Вам от ХруСТ'а Вооот, как я и думал, что или я где-то туплю или хз сделал глобально:
потом внутри ф-ции BitBtn1Click объявил массив:
Осталось только свою прогу переделать, раз примерчик работает, думаю и там проблем не будет) |
| Автор: XPyCT 19.12.2011, 21:05 | ||
тогда сорри! тогда действительно лучше глобально обьявить. Но если будут планы реализовывать и на других формах сие чудо тогда уже делайте класс N пихайте в закрытый раздел и всего 1н или два метода |