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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование void* 
:(
    Опции темы
Гость_MoreHate
Дата 2.12.2005, 17:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

struct sItem{
    char Name[25];
    int ChildCount;
    int Size;
    void* Value;
};

struct sItem Item;


Вопрос, как добавить в Item строку и как int.

Код

(int* )Item.Value = new int; // не работает
(char*) Item.Value = new char[Item.Size];


В поиске ничего нет.
  Вверх
Void
Дата 2.12.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Код

Item.Value = new int;
Item.Value = new char[Item.Size];



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Neitron
Дата 2.12.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

Item.Value = new int;

Работаеет...
А вообще не испольщуй void в таких моментах, дурной стиль.


--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
Гость_MoreHate
Дата 2.12.2005, 18:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Почему? Мне нужна структура, у которой параметр Value м.б. char, small, int, string. Как еще можно сделать, кроме как сделать отдельные переменные для каждого типа. Но тогда память жалко smile
  Вверх
Дрон
Дата 2.12.2005, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Гость_MoreHate
Чисто из любопытства: а как ты потом узнаешь какой именно тип был у Value?


--------------------
Да. Именно так.
PM   Вверх
Гость_MoreHate
Дата 2.12.2005, 18:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Size = 1 - char
Size = 2 - short
Size = 4 - int
Size = число - char[число]
smile
  Вверх
Void
Дата 2.12.2005, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



А строки с длиной менее 3 символов, значит, в природе не существуют? smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Guest
Дата 2.12.2005, 19:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











У них будет длина 5. Т.е. 4 буквы. Небольшие потери не страшны smile Это лучше, чем добавлять еще одно поле Type.

Если это действительно так коряво, то как лучше сделать?
  Вверх
Void
Дата 2.12.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Учитвая, что все хранимые типы - POD, можно отделаться union и одним полем типа. В итоге получается экономнее:
Код
struct sItem {
    char Name[25];
    int childCount;
    enum type_t { type_Char, type_Short, type_Int, type_String };
    type_t type;
    union {
        char c;
        short s;
        int i;
        char sz[5];
    };
   sItem(char c) : c(c), type(type_Char) { }
// ну и остальные перегруженные варианты конструктора по аналогии
};



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
AISIN
Дата 2.12.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Можно сделать шаблонный класс
Код

template <typename T>
class pik

  char Name;
  int х;
  T tLif;
public:
   pik();
   pik(T tLif);
}

--------------------
Внимание!!! Внимание!!!Запущена программа по завоеванию мира!!!Выполненно 0,000000000000000000000000000000000000000000000000000002%
PM MAIL   Вверх
Гость_MoreHate
Дата 2.12.2005, 20:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо, возьму на заметку
  Вверх
Гость_MoreHate
Дата 17.12.2005, 16:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Немного не могу разобраться с & и *. Смотрите:
Со строкой работаем так:
Код

Item[5].Value = new char[Item[5].Size];
strcpy((char*)Item[5].Value, "Value111");


Теперь с INT
Код

Item[5].Value = new int;
*(Item[5].Value) = 25;

Не работает. Не могу понять как. Кучу исходников уже перерыл.


Пишем в файл int. Правильно?
Код

fwrite(&Item[5].Value, sizeof(int), 1, Stream);


Пишем в файл строку
Код

fwrite(Item[5].Value, sizeof(char), Item[5].Size, Stream);


Читаем int из файла
Код

fread(&Base[5].Value, sizeof(int), 1, Stream);


Что верно, что нет?
  Вверх
DeadSoul
Дата 17.12.2005, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата
Почему? Мне нужна структура, у которой параметр Value м.б. char, small, int, string. Как еще можно сделать, кроме как сделать отдельные переменные для каждого типа. Но тогда память жалко 

Используй VARIANT


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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