Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 20.07.2011, 14:09   #1
Vladin
 
Регистрация: 20.07.2011
Сообщений: 3
Сообщение Как создать динамическую структуру в составе которой есть динамическая структура

Всем привет!
Я глобально определяю структуру которую хочу сделать динамической, в этой структуре так же есть структура которая так же динамическая.
Вопросы:
- как объявить эти структуры
- как их заполнить данными
- как их потом читать
Как пример я думал должно выглядеть примерно следующим образом:

typedef struct RL_KOR
{
QString name_kor;
QString vid_sv;
}

typedef struct HAR_RL
{
int n_rl;
QString kl_izl;
RL_KOR *rl_kor;

}

bool set() // запись произвольных данных в структуру
{
int y1 = 10;
int y2 = 20; //произвольные числа

RL_KOR *rl_kor = new RL_KOR[y1];
HAR_RL *har_rl = new HAR_RL[y2];

for(int i = 0; i < y1; i++)
{
har_rl[y1].n_rl=1;

for(int j=0; j< y2; j++)
{
har_rl[y1].rl_kor[y2].name_kor = "Первый";
}
}
}

Заранее спасибо.
Vladin вне форума Ответить с цитированием
Старый 20.07.2011, 14:33   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

Vladin

Вопросы:
- как объявить эти структуры
- как их заполнить данными
- как их потом читать


Используй конструктор/деструктор

Код:
struct Foo
{
   int i;
};

struct Bar
{
   Foo* foo;

   Bar() : foo(new Foo()) {}
   ~Bar() { delete foo; }
};

Bar* bar = new Bar();
bar->foo->i = 0;
delete foo;
Rififi вне форума Ответить с цитированием
Старый 20.07.2011, 14:58   #3
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Код:
Bar() : foo(new Foo()) {}
Не. Перед применением new, указатель лучше инициализировать нулем, а то при коде с исключениями потом могут быть проблемы.
Код:
Bar() : foo(0) {foo = new Foo();}
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 20.07.2011, 15:28   #4
Vladin
 
Регистрация: 20.07.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Vladin

Вопросы:
- как объявить эти структуры
- как их заполнить данными
- как их потом читать


Используй конструктор/деструктор

Код:
struct Foo
{
   int i;
};

struct Bar
{
   Foo* foo;

   Bar() : foo(new Foo()) {}
   ~Bar() { delete foo; }
};

Bar* bar = new Bar();
bar->foo->i = 0;
delete foo;
А как при этом сделать обе структуры в виде динамических массивов?
Vladin вне форума Ответить с цитированием
Старый 20.07.2011, 19:57   #5
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от Vladin Посмотреть сообщение
Всем привет!
Я глобально определяю структуру которую хочу сделать динамической, в этой структуре так же есть структура которая так же динамическая.
Вопросы:
- как объявить эти структуры
- как их заполнить данными
- как их потом читать
Как пример я думал должно выглядеть примерно следующим образом:

typedef struct RL_KOR
{
QString name_kor;
QString vid_sv;
}

typedef struct HAR_RL
{
int n_rl;
QString kl_izl;
RL_KOR *rl_kor;

}

bool set() // запись произвольных данных в структуру
{
int y1 = 10;
int y2 = 20; //произвольные числа

RL_KOR *rl_kor = new RL_KOR[y1];
HAR_RL *har_rl = new HAR_RL[y2];

for(int i = 0; i < y1; i++)
{
har_rl[y1].n_rl=1;

for(int j=0; j< y2; j++)
{
har_rl[y1].rl_kor[y2].name_kor = "Первый";
}
}
}

Заранее спасибо.
Для этих целей вы можете использовать стандартный контейнер std::vector.

У вас не правильно определены typedef(ы). Должно быть так, ннапример

typedef struct
{
QString name_kor;
QString vid_sv;
} RL_KOR;

Затем объявляете вектор этих структур

std::vector<RL_KOR> MyVector( y1 );

А после этого каждой структуре можете присвоить значения с помощью оператора индексирования

MyVector[0].name_kor = /* что-то там присваиваете */;
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 26.07.2011, 13:08   #6
Vladin
 
Регистрация: 20.07.2011
Сообщений: 3
По умолчанию

У меня все равно не получается.
Цитата:
using namespace std;
typedef struct {
int kod;
int pas;
}RSR;

void MyFunc()
{
int kol_rsr = 4;
int kol_rl = 5;
vector<vector <RSR> > v(kol_rl);
v.resize( kol_rsr);
v.resize( kol_rsr);

v[0][0].kod = 1234; // тут прога вылетает
}
понятно что я что-то неправильно делаю но не хвататает знаний. Помогите плиз!

Спасибо всем ранее ответившим!
Vladin вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамическая структура Тимурка Помощь студентам 0 20.04.2011 16:37
Нужно прочитать из файла txt в динамическую структуру dimalem Общие вопросы C/C++ 0 18.04.2010 14:16
Динамическая структура Nitriyc Помощь студентам 0 18.12.2009 17:51
динамическая структура o4arova6ka90 Помощь студентам 0 17.10.2009 13:05
Как создать динамическую матрицу? prikolist Общие вопросы C/C++ 2 16.04.2009 14:51


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS