Название: Как правильно передать массив классов в конструктор? Отправлено: labview от Август 13, 2010, 15:26 Всем привет!
Хочу передать один определённый массив классов в конструкторы двух других классов. Сделал так. Класс первый: Код: #ifndef THREAD1_H Код: #include "thread1.h" И аналогично Класс второй: Код: #ifndef THREAD2_H Код: #include "thread2.h" В main.cpp делаю так: Код: #include <QtGui/QApplication> Если я проделываю это только с одним классом то всё ок, а если работают оба то получаю сегфолт. Дело вот в этой строке конструктора второго класса: Код: Tasks[i] = allTasks[i]; Если эту строку убрать, то прога работает. Подскажите плиз в чём проблема. Название: Re: Как правильно передать массив классов в конструктор? Отправлено: m_ax от Август 13, 2010, 16:05 Может нужно вначале (перед использованием массива Tasks) выделить для него память?
Код а уже потом пытаться в него записывать. Название: Re: Как правильно передать массив классов в конструктор? Отправлено: labview от Август 13, 2010, 16:14 Спасибо, теперь понятно, что нужно сначала выделить память, но компилятор ругается.
Код: incompatible types in assignment of 'Tasking**' to 'Tasking* [0]' И ещё вопрос, а почему оно работало с одним классом? Название: Re: Как правильно передать массив классов в конструктор? Отправлено: Igors от Август 13, 2010, 16:17 1) Если Вы хотите скопировать массив указателей, то память для приемника (куда копируется) должна быть выделена напр
Код
2) Код: Thread1 myThread1(allTasks, sizeof(allTasks)); sizeof возвращает размер структуры в байтах, а не число элементов в массиве. Есть классная макруха Код
Название: Re: Как правильно передать массив классов в конструктор? Отправлено: Igors от Август 13, 2010, 16:27 Спасибо, теперь понятно, что нужно сначала выделить память, но компилятор ругается. Что такое Tasking* []' - во всяком случае мудрено понять :)Код: incompatible types in assignment of 'Tasking**' to 'Tasking* [0]' Объявите проще: Tasking ** Tasks; Название: Re: Как правильно передать массив классов в конструктор? Отправлено: labview от Август 13, 2010, 16:33 Ок, так сделал. Переобьявил Tasks[] на **Tasks, с delete начала прога вылетать, убрал строки с delete, вроде заработало.
Макросами пока не пользовался, временно сделал вызов таким: Код: Thread1 myThread1(allTasks, sizeof(allTasks)/sizeof(allTasks[0])); Вроде пока всё заработало. Спасибо. ЗЫ да C++ у меня хромает, сори, учусь. Название: Re: Как правильно передать массив классов в конструктор? Отправлено: Igors от Август 13, 2010, 16:47 Ок, так сделал. Переобьявил Tasks[] на **Tasks, с delete начала прога вылетать, убрал строки с delete, вроде заработало. Просто убрать - ошибка, Вы должны удалять старый массив когда пришел новый, иначе получите утечку памяти. Проследите что Tasks инициализирован нулем в конструкторе.Название: Re: Как правильно передать массив классов в конструктор? Отправлено: labview от Август 13, 2010, 16:50 А как это сделать? И ещё мы ведь и так находимся в конструкторе, чем он может быть ещё инициализирован если обьект только только начинает своё существование?
Спасибо. Название: Re: Как правильно передать массив классов в конструктор? Отправлено: m_ax от Август 13, 2010, 16:58 Цитировать Просто убрать - ошибка, Вы должны удалять старый массив когда пришел новый, иначе получите утечку памяти. Проследите что Tasks инициализирован нулем в конструкторе. Да нафига в конструкторе то delete? Я понимаю, он (конструктор) без аргументов был, а запись массива производилась бы в какой-нить другой функции уже позже.. Тогда, да в конструкторе не грех и занулить Tasks = 0; Но в данной ситуации delete в конструкторе - это ошибка. Когда мы в конструкторе вызываем Код что он будет пытаться удалить? Мусор)) Название: Re: Как правильно передать массив классов в конструктор? Отправлено: Igors от Август 13, 2010, 17:09 Да нафига в конструкторе то delete? Пардон, фигню спорол :) Совсем не увидел что это сам конструктор и есть - тогда конечно не надоНазвание: Re: Как правильно передать массив классов в конструктор? Отправлено: Nimbus от Август 16, 2010, 04:13 Код
;) Название: Re: Как правильно передать массив классов в конструктор? Отправлено: SASA от Август 18, 2010, 14:23 Люди! Пользуйтесь QList, QSet, и т.д. Использвать сишные массивы надо только в КРАЙНЕМ случае.
Название: Re: Как правильно передать массив классов в конструктор? Отправлено: Igors от Август 18, 2010, 14:34 Люди! Пользуйтесь QList, QSet, и т.д. Использвать сишные массивы надо только в КРАЙНЕМ случае. Хмм... если человек еще не владеет С массивами и сразу начнет с контейнеров - получится совсем не гуд :)Название: Re: Как правильно передать массив классов в конструктор? Отправлено: Sancho_s_rancho от Август 18, 2010, 15:33 Люди! Пользуйтесь QList, QSet, и т.д. Использвать сишные массивы надо только в КРАЙНЕМ случае. Хмм... если человек еще не владеет С массивами и сразу начнет с контейнеров - получится совсем не гуд :)ПиСи "принципы и практика использования C++" - книга именно для начинающих, по ней Бьярн читает лекции молодым студентам. |