Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2011, 23:59   #1
D-Vampire
 
Регистрация: 19.12.2011
Сообщений: 3
По умолчанию Динамическое Выделение Памяти В Конструкторе Класса

Суть проблемы в следующем: имеется класс, в нем имеется Ccomplex **mArray:
Код:
		struct Ccomplex
		{
			float x;
			float y;
		};
В методе InitObject(int size) выделяется память для массива mArray[size][size+1]:
Код:
		void InitObject(int size)
		{
			size--;
			mArray = NULL;

			int tmp = size + 1;
			mArray = new Ccomplex*[size];
			
			for (int i=0; i <= tmp; i++)
			{
				mArray[i] = new Ccomplex[tmp];
			}

			iMSize = size + 1;
		}
Все замечательно. Однако, необходимо для класса описать конструктор копирования. И все бы ничего, просто скопировать массив структур из одного класса в другой. Но проблема в том, что размерность у массивов таких классов может быть разная. А потому, необходимо выделять память в конструкторе для объекта this заново. Причем размерность должна зависеть от конечного значения, чего делать нельзя:
Код:
		CMatrix(const CMatrix& tmp)
		{
			int t = /* ошибка здесь */ tmp->GetMatrSize(), m = t+1;
			this->InitObject(t);
			for(int j=0; j != m; j++)
			{
				for (int i=0; i != t; i++)
				{
					this->mArray[j][i].x = tmp.mArray[j][i].x;
					this->mArray[j][i].y = tmp.mArray[j][i].y;
				}

			}
		}
Вопрос в том, как избежать проблему, не внося дополнительных параметров в конструктор и по возможности, без использования глобальных переменных?
D-Vampire вне форума Ответить с цитированием
Старый 20.12.2011, 00:05   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а у вас ссылка а не указатель на объект, потому надо . а не -> использовать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.12.2011, 00:10   #3
D-Vampire
 
Регистрация: 19.12.2011
Сообщений: 3
По умолчанию

-> путем экспериментов было поставлено, с . тоже не компилируется. Пробовал и указатель вместо ссылки передавать, и приведение к типу делать, все равно.

Собираю в VS 2010.
Код:
 error C2662: CMatrix::GetMatrSize: невозможно преобразовать указатель "this" из "const CMatrix" в "CMatrix &"  В результате преобразования теряются квалификаторы
Помогла передача переменной вместо константы, что не совсем красиво, есть ли еще способы?

Последний раз редактировалось D-Vampire; 20.12.2011 в 00:14.
D-Vampire вне форума Ответить с цитированием
Старый 20.12.2011, 00:14   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас метод не объявлен как константный:
Код:
result_type method_name() const;
для методов которые не изменяют объект.(а если изменяют то не скомпилиться в общем то)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.12.2011, 00:26   #5
D-Vampire
 
Регистрация: 19.12.2011
Сообщений: 3
По умолчанию

Благодарю за разъяснение.
D-Vampire вне форума Ответить с цитированием
Старый 20.12.2011, 00:34   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

D-Vampire

int t = /* ошибка здесь */ tmp->GetMatrSize(), m = t+1;

у константного объекта можно вызывать только константные функции. ибонефик. :amazed:
Rififi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое выделение памяти , realloc. _-Re@l-_ Общие вопросы C/C++ 8 03.11.2011 10:20
динамическое выделение памяти. Turbo pascal AHD Помощь студентам 2 10.12.2010 14:27
Динамическое выделение памяти, как лучше? Пепел Феникса Общие вопросы по программированию, компьютерный форум 10 11.03.2010 09:44
Динамическое выделение памяти под массивы Артем125 Общие вопросы C/C++ 4 07.04.2009 09:52
Динамическое выделение памяти FW-TOT Общие вопросы C/C++ 2 19.12.2008 00:42