Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2009, 15:18   #1
Meduzza
 
Регистрация: 25.05.2009
Сообщений: 3
Смущение проблема создания массива объектов

Доброго времени суток. Visual Studio 2005(windows form application). Не удается создать массив объектов своего класса. Класс:

Код:
ref class k_cell
{
public:
        wchar_t *s_name; 
        int n;
};
Пробовал несколькими способами:
Способ 1:

Код:
array<k_cell^>^ tmp; //создание массива tmp из элементов k_cell
tmp[0]->f_name = new wchar_t[txt_len]; //ошибка
- когда доходит до последней строки - пишет что в экземпляре объекта не заданна ссылка на объект. Другой вариант:
Способ 2:

Код:
k_cell ^*base; //создание укзателей на объекты класса k_cell
base[0] = gcnew k_cell; //адресация 1 указателя на объект типа k_cell
base[0]->f_name = new wchar_t[txt_len]; //ошибка
- тоже самое. Но при этом если объявлять без массива, то все работает норм:

Код:
k_cell ^ m_add_cell = gcnew k_cell; //создание объекта своего класса
m_add_cell->f_name = new wchar_t[txt_len]; //код рабоатет нормально
Подскажите, пожалуйста, чем отличаются эти 2 способа и почему они не работают. Поиск в гугле, мсдн, форумах не помог. Благодарю за внимание.
Meduzza вне форума Ответить с цитированием
Старый 25.05.2009, 19:03   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Способ первый:
А добавлять элементы в массив кто будет? Насколько я вижу, вы только объявили контейнер, способный хранить данные вашего типа. Контейнер пуст. А вы пытаетесь его несуществующим элементам присвоить значения.
Второй способ:
Код:
k_cell ^*base; //создание укзателей на объекты класса k_cell
base[0] = gcnew k_cell; //адресация 1 указателя на объект типа k_cell
Какой base[0]? Вы создали указатель на обьект. Потом нужно выделить память под массив. А потом уже только создавать отдельные элементы.
Это примерно будет выглядеть так
Код:
k_cell ^**base;
base = gcnew k_cell*[10];
for(int i = 0; i < 10; i++)
      base[i] = gcnew k_cell;
Но для этого нужно объявить конструктор по умолчанию внутри класса.
MaTBeu вне форума Ответить с цитированием
Старый 26.05.2009, 04:30   #3
Meduzza
 
Регистрация: 25.05.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Но для этого нужно объявить конструктор по умолчанию внутри класса.
Похоже в этом и проблема. У меня вообще нет конструктора =) (я так понял, что компилятор автоматом создает объекты без инициализации). Читаю мануалы, через пару дней отпишусь.

Спасибо большое, теперь есть что думать
Meduzza вне форума Ответить с цитированием
Старый 28.05.2009, 05:07   #4
Meduzza
 
Регистрация: 25.05.2009
Сообщений: 3
По умолчанию

Конструктор по умолчанию следующий:
Код:
k_cell::k_cell()
{
        s_name = new wchar_t[];
        n = 1;
}
Компилятор не позволяет так просто объявить массив, как на простые переменные. Например, ему очень не нравятся квадратные скобки. Допустимая форма :
Код:
array<k_cell^>^ mas;
но даже в этом случае работать с ним не получается. Память выделяю так:
Код:
mas[0] = gcnew k_cell;
(т.е. хотябы на нулевой элемент)
Программа компилируется, но в этом месте выдает: "NullReferenceException was unhandled" "В экземпляре объекта не задана ссылка на объект".
До инициализации дело вообще не доходит...
На сколько я понял - проблема в выделении памяти, но пока решить не удается . Как я писал раньше, если просто создавать пременные этого класса - все работает нормально.

Благодарю за внимание.

P.S. эксперименты по типу
Код:
mas[0]->t_name[0] = Char('f');
- также неудачны.

Последний раз редактировалось Meduzza; 28.05.2009 в 05:11.
Meduzza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Судоку. Проблема с отображением елементов массива в решетке. leshax Помощь студентам 3 10.05.2009 18:29
Проблема со случайным заполнением массива nyanga's_sist Общие вопросы Delphi 7 14.02.2009 22:32
Проблема с автоматическим подключением библиотек объектов iliy Общие вопросы Delphi 6 31.01.2009 06:39
Delphi: Проблема с созданием объектов Omedus Помощь студентам 4 08.08.2008 18:42