Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 ); |
|
Вернуться к началу |
|
|
sars
Зарегистрирован: 13.11.2004 Сообщения: 4
|
Добавлено: Вс Ноя 21 2004 22:06 Заголовок сообщения: |
|
|
А как насчет того, чтобы задавать количество элементов массива в квадратных скобках, а не в круглых _________________ С уважением, Роман |
|
Вернуться к началу |
|
|
|