![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
yep |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
Есть класс с константным полем. Есть другой класс, который содержит статический массив из первого класса. Как инициализировать константные поля первого класса значением, переданным аргументом конструктора второго класса?
Это выглядит типа
Это сообщение отредактировал(а) yep - 6.8.2008, 19:35 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
так не пройдет , так как массив требует конструктора без параметров.. как обходной вариант : создать динамический массив П.С. непойму.. Вы вручную собирались задавать значения всем 20 объектам, а если бы их было 2000 ? |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вообще-то константность и убрать можно на крайняк
но лучше динамический массив а еще лучше вектор |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а вектор примет класс у которого нет конструктора без параметров ?? Добавлено через 1 минуту и 41 секунду крайняк это когда часть кода чужая.. ![]() А в данном случае помойму проблема с проектировкой ![]() |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
если есть конструктор копирования, то никуда он не денется
|
|||
|
||||
yep |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
В моём случае размер массива 10, и менять его никогда не придётся (в частности, поэтому и хочу его оставить статическим). Конечно, 10 элементов можно и вручную проинциализировать, но меня интересует как это делать по-нормальному.
"так не пройдет , так как массив требует конструктора без параметров.." т.е. нельзя проиницилизировать по отдельности? Ничего необычного в этом не вижу и полагал, что это возможно, но попытавшись это сделать типа Class2::Class2(int i): c1[0]=i возникает ошибка error C2059: syntax error : '['. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
нельзя , так это проскакивание через уровень.. подобная инициализация прошла бы на уровне массива .. но к сожалению у статического массива нельзя определить конструктор |
|||
|
||||
yep |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
А как установить статический массив?
полагаю, надо сначала выделить необходимую память для соответсвующего указателя, а потом присвоить циклом new Class1(value) написал так:
Но возникает ошибка времени выполнения. Если подход правильный, то в чём ошибка? И как написать c1 = (Class1 *)malloc(sizeof(Class1)*10); через new? Это сообщение отредактировал(а) yep - 8.8.2008, 18:04 |
||||
|
|||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ужос.. (не говоря об опечатке в названии конструктора ![]()
Это сообщение отредактировал(а) mes - 8.8.2008, 18:58 |
||||||
|
|||||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
По моему сдесь ошибка:
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
yep |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
Насчёт вектора тоже самое представил. Но подумал сделать так. Наверно сделаю вектором. А что значит ужос? Добавлено через 13 секунд такая запись, вероятно, создаст не десятиэлементыный массив, проинициализированный value, а создаст массив из value элементов, проинициализированных конструктором по умолчанию.
Сначала я выделил необходимую память, а потом начал её заполнять, при помощи указателя p. Понял в чём ошибка. Ошибся, что использовал new в строке p = new Class1(value); надо было *p = Class1(value); |
||||||
|
|||||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а самое плохое в том, что сами не осознаете что делаете.. вот в этом то и ужос ! Старайтесь писать проще.. не надо выдумывать ничего заоблачного и все само собой станет понятно .. ![]() Это сообщение отредактировал(а) mes - 9.8.2008, 00:10 |
||||
|
|||||
yep |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
Я то прекрасно осознаю, просто ошибся в строке. После исправления ужос исчерпан?
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если исправлением называется это : то нет |
|||
|
||||
yep |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
Можно поконкретнее что здесь является заоблачным создание массива или проектировка? Проектировка мне нравится и считаю её удобной, надо было только преодолеть этот момент, который уже видимо преодолён. Добавлено через 3 минуты и 4 секунды
Что именно на ваш взгляд я не осознаю в своём коде? Добавлено через 4 минуты и 46 секунд Говорят new безопаснее malloc'a. Остался не отвеченным вопрос: как запись (Class1 *)malloc(sizeof(Class1)*10) через new? Добавлено через 12 минут и 34 секунды
Нет хотел выделить именно под 10 объектов типа class1. Указатель используется для заполнения этой выделенной памяти |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |