Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура 
:(
    Опции темы
kline2005
Дата 7.2.2005, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.2.2005

Репутация: нет
Всего: нет



Братцы, кто нибудь знает как программно
(во время выполнения) создать и заполнить структуры?
PM MAIL   Вверх
Peter
Дата 7.2.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Непонятно, что имеется в виду.
Можно написать функции, прицепить их к кнопочкам, например. В функции динамически создавать структуры и заполнять. Потом не забыть поудалять с помощью delete.
Код
struct STRU {... /* состав структуры */};

void MakeStructExample(){
STRU *pSTRU = new STRU;
...
}



--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
kline2005
Дата 7.2.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.2.2005

Репутация: нет
Всего: нет



Я имею ввиду именно создание структуры
типа:
char a = Edit1->Text = ...//тип поля
char b = Edit2->Text = ...//длина поля

struct
{
a[b];
};
и т.д.[s]
PM MAIL   Вверх
JackYF
Дата 8.2.2005, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



создавать динамически структуры, не описанные в исходнике, невозможно!

Невозможно создать "то, не знаю что". smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Peter
Дата 8.2.2005, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Цитата(JackYF @ 8.2.2005, 00:46)
создавать динамически структуры, не описанные в исходнике, невозможно!

Можно, по крайней мере, выкрутиться следующим образом: держать кучу памяти
Код
void* p = (void*) new WORD[10000];

и интерпретировать, допустим, первые четыре байта как размер структуры, вторые - количество полей, дальше - описание их типов, а все остальное - это данные.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
gepard
Дата 8.2.2005, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2477
Регистрация: 29.2.2004

Репутация: 2
Всего: 40



Цитата
Можно, по крайней мере, выкрутиться следующим образом: держать кучу памяти

А зачем её держать, если можно в любой момент динамически выделить?
Сам же привёл пример...

А по поводу дин. структур:
Можно...
Допустим нам надо загрузить её из файла, точнее создать из файла...
Содержимое файла:
Цитата

struct my
{
    float my;
    int lop;
}

Теперь в твоей проге-анализаторе, должны быть ссылки, например:
Код

float* float_array;
int* int_array;

С их помощью ты будешь хранить значения переменных. Т.е. когда прог видит надпись float my, она автоматически выделяет память под хранение значения переменной типа float в float_array. Для int'а тоже самое.
Теперь, как обратиться к этой переменной?
У тебя должна быть структура(в самой проге-анализаторе):
Код

struct vars
{
   char name[256];
   void* ptr;
}

Первый аргумент - имя переменной("my"), второй - указатель на область, где храниться эта переменная. Хотя... Можно было без первых массивов... что-то я подзабыл про void*. Ну да ладно... обе реализации возможны...
Когда идёт, например, присвоение переменной нового значения:
Цитата

my = 5.893;

прога-анализатор должна смотерть на имя переменной и идти в соответствующую область памяти для присвоения нового значения.

Это сообщение отредактировал(а) gepard - 8.2.2005, 10:31


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
IEZ
Дата 11.2.2005, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 3



Цитата(JackYF @ 8.2.2005, 00:46)
создавать динамически структуры, не описанные в исходнике, невозможно!

Громкое заявление.
kline2005
Можно попробовать на основе STL.
Только тебе надо определиться составляешь ты структуру массива переменных или массив структур.
А так подойдет и vector из STLя. smile
Добавлено @ 00:48
Цитата(Peter @ 8.2.2005, 09:55)
Можно, по крайней мере, выкрутиться следующим образом: держать кучу памяти

Не удобно, нужно заранее выделять.
А там динамические добавляй или удаляй. smile



--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 11.2.2005, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Цитата
Братцы, кто нибудь знает как программно
(во время выполнения) создать и заполнить структуры?

Никак. Сначало надо определить, а потом создавать и заполнять эти структуры.

Это сообщение отредактировал(а) bel_nikita - 11.2.2005, 01:44


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
IEZ
Дата 11.2.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 3



Цитата(bel_nikita @ 11.2.2005, 01:40)
Никак. Сначало надо определить, а потом создавать и заполнять эти структуры.

bel_nikita А зачем тогда придумали VARIANT?
Вот ссылка на эту колбасню, кстати из MSDN: VARIANT and VARIANTARG
С помощью которого можно динамически грузить переменные, типы которого ты можешь подгружать.
Ну а скрестив vector с VARIANT, получается std::vector<VARIANT>, то что и требовалось в теме.
А дальше уж kline2005 нужно только самому подумать где и когда это все подгружать. smile


--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 11.2.2005, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



IEZ
Приведи пример, пожалуйста:
Цитата
Я имею ввиду именно создание структуры
типа:
Код

char a = Edit1->Text = ...//тип поля
char b = Edit2->Text = ...//длина поля

struct
{
a[b];
};
и т.д.[s]



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
IEZ
Дата 11.2.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 3



bel_nikita Ну даже на одних векторах, что-то типа этого:
Код

#include <vector>
using namespace std;

char * a;
char * b;

vector<char *> m_vB;
vector<vector<char *> > m_vA;

strcpy(b, _T("Длина поля"));
m_vB.push_back(b);
m_vA.push_back(m_vB);
smile

P.S. Можно правда и через класс свой забабахать.

Это сообщение отредактировал(а) IEZ - 11.2.2005, 12:33


--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 11.2.2005, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Дык, это ясно smile

З.Ы.: через VARIANT хотел. Хотел посмотреть, как это юзается smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
IEZ
Дата 12.2.2005, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 3



Код

VARIANT var;
::VariantInit (&var);
var.vt = VT_I4;
var.lVal = 10;
smile


--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
Peter
Дата 14.2.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Ведь функции printf, scanf и прочие с неопределенным числом параметров - они же динамически распознают типы. И тут так же сделать.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.