Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Вложенные классы и/или структуры в C++

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
The KING



Зарегистрирован: 16.11.2004
Сообщения: 2

СообщениеДобавлено: Вт Ноя 16 2004 11:20    Заголовок сообщения: Вложенные классы и/или структуры в C++ Ответить с цитатой

У меня такая проблема. Есть структура:

struct Izd
{
char Nam[10];
int Num;
Det det;
};

в которой используется мною создаваемый класс Det

class Det
{
public:
char Nam[10][10];
int Num[10];
int Col;
};

Нужно сделать так, чтобы элементы класса Det.Nam и Det.Num были массивами размерности Det.Col. задаваемой в процессе выполнения программы.
Может кто знает, как это сделать предложенным способом или есть какой-то другой способ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FUKS



Зарегистрирован: 14.04.2002
Сообщения: 148
Откуда: Москва

СообщениеДобавлено: Вт Ноя 16 2004 12:41    Заголовок сообщения: Re: Вложенные классы и/или структуры в C++ Ответить с цитатой

В данном случае описана статическая структура, а раз размерность задаётся в процессе исполнения, значит надо память выделять динамически, а в структуре использовать указатель на выделенный блок памяти. Если я правильно врубаюсь в идеологию ++, то примерно так (а если неправильно, то поправьте):
Код:

class Det (int Col, char *Nam, int *Num)
{
  public:
  Det();
  char *Nam;
  int *Num;
  int Col;
};

Det::Det() // Конструктор
{
  this.Col=Col;
  this.Nam=malloc (Col*Col*sizeof(char)); // Не забыть убить в деструкторе
  this.Num=malloc (Col*sizeof(int)); // И это тоже
};

~Det::Det() // Деструктор
{
  free (this.Nam); // Освобождение
  free (this.Num); // памяти
};

struct Izd
{
char Nam[10];
int  Num;
Det *det;
};

Izd NewIzd;
Izd.Det = new Det (10);

Но изначально задаваемой размерности двумерного массива тут наверно не получится.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
The KING



Зарегистрирован: 16.11.2004
Сообщения: 2

СообщениеДобавлено: Чт Ноя 18 2004 04:06    Заголовок сообщения: Ответить с цитатой

В таком виде исходник имеет уйму ошибок. Смог довести до одной:

#include <stdio.h>
#include <malloc.h>

class Det
{
public:
Det();
~Det();
char *Nam;
int *Num;
int Col;
};

Det::Det()
{
this->Col=Col;
this->Nam=(char *)calloc(Col,sizeof(char));
this->Num=(int *)calloc (Col,sizeof(int));
};

Det::~Det()
{
free (this->Nam);
free (this->Num);
};

struct Izd
{
char Nam[10];
int Num;
Det *det;
};

void main(void)
{
Izd NewIzd;
NewIzd.det = new Det (10);
}

Ошибка:
error C2664: 'Det::Det(const class Det &)' : cannot convert parameter 1 from 'const int' to 'const class Det &' (new behavior; please see help).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
droopy



Зарегистрирован: 28.07.2004
Сообщения: 168

СообщениеДобавлено: Чт Ноя 18 2004 10:04    Заголовок сообщения: Ответить с цитатой

объяви в Det::Det() в качкстве параметра переменну Col
det::det( int col );
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
sars



Зарегистрирован: 13.11.2004
Сообщения: 4

СообщениеДобавлено: Вс Ноя 21 2004 22:06    Заголовок сообщения: Ответить с цитатой

А как насчет того, чтобы задавать количество элементов массива в квадратных скобках, а не в круглых
_________________
С уважением, Роман
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...