![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| kobalt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
есть структура poi основанная на структуре point
при создание элемента el1 структуры poi выдается ошибка: Дополнительные сведения: В экземпляре объекта не задана ссылка на объект. как правильно создать элемент el1 ?
|
|||
|
||||
| Pilger |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Объект создается так:
или так:
Это сообщение отредактировал(а) Pilger - 24.9.2008, 17:40 -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
||||
|
|||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Думаю, в данном случае ошибка возникает в строке
Дело в том, что в самой структуре, ты объявляешь пустой массив, а потом обращаешься к индексу 1 этого массива. Тебе нужно либо переопределить массив перед использованием, либо вообще вместо массива использовать коллекцию(по-моему оптимальный вариант). -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| kobalt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
Pilger, пробовал ваш вариант - не работает
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Ну дык, ясный перец не будет работать. Для разнообразия можно было бы и на моё замечание обратить внимание. Я же объяснил, что NullReferenceException вызывает не структура, а её поле pp. Оно пустое, естественно обращаться к нему нельзя. А вариант, предложенный Pligerом, от твоего ни чем не отличается. Ну если ты считаешь, что diadiavova просто гонит, тогда - удачи. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| kobalt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
сейчас читаю про коллекции (раньше с ними не работал).
В самой структуре объявить непустой массив не удается. Как переопределить массив перед использованием? |
|||
|
||||
| Pilger |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Знаю. Извиняюсь, не правильно понял проблему. Diadiavova предложил такой вариант: "Тебе нужно либо переопределить массив перед использованием" Тобишь это будет так:
Это сообщение отредактировал(а) Pilger - 25.9.2008, 17:34 -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
||||
|
|||||
| diadiavova |
|
||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
В общем и целом Pilger ответил на вопрос, однако, судя по всему, здесь потребуются некоторые дополнительные разъяснения.
Если говорить о массивах то они создаются при объявлении в том случае, когда указаны индексы, в ином случае, объявляется просто пустая переменная(как и произошло), тогда можно переопределить, используя конструкцию ReDim(как предложил Pilger) или просто присвоить полю значение. Например так
Разницы нет. При этом надо иметь в виду, что если конструкция ReDim используется для увеличения количества индексов её следет применять со словом Preserve. Если нужно, чтобы массив создавался внутри структуры, здесь всё зависит от задач, стоящих перед тобой. Например: если известно заранее сколько будет элементов в массиве, и это число фиксированное - то нет проблем, приведу пример для случая, когда в массиве 5 элементов
Однако, подозреваю, что число это может быть разным. В таком случае, тебе следует рассмотреть вариант использования параметрического конструктора
В этом случае, для создания экземпляра структуры можно использовать код
в результате получится объект с десятью элементами в массиве, а поле i будет равно 5. Что касается структуры point. Во-первых, в пространстве System.Drawing имеется две похожие структуры (Point и PointF), прежде, чем создавать свою, рассмотри возможность использования одной из них. Если же ни одна не подойдёт, всё равно называть свою структуру point - плохая идея, пространство это импортируется в проект по умолчанию, а дублирование имён может привести к конфликту(сам запутаешься). -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||||
|
|||||||||
| kobalt |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 24.9.2008 Где: москва Репутация: нет Всего: нет |
Спасибо, все работает!
PS: структуру point взял где то из примеров - использую для описания координат точек на плоскости PPS: сейчас описываю задачу формулами, после понадобится рисование несложной графики на плоскости (передвигающиеся линии, окружности) - не могли бы взяться (разумеется не бесссплатно) |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Если точки нужны для рисования графики - тем более лучше использовать "родные" (из System.Drawing). Например: прорисовка многоугольника требует передачи массива точек, естественно "родных" конвертирование требует дополнительных затрат. Насчёт взяться - надо посмотреть, что там за задача.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Кстати, в сообщении, где я привёл следующий код:
я слегка ошибся. В структурах инициировать массив нельзя. То есть можно использовать либо второй вариант(где массив инициируется в конструкторе), либо переопределять его вне кода самой структуры. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |