![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Dims |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Хочу создать пару из объектов, в классах которых нет конструктора по умолчанию, так что строка
вызывает ошибку no appropriate default constructor available где-то в глубинах STL Это логично. Поэтому я пишу
поскольку конструктор CSpecSizeModel принимает 1 целочисленный параметр. Но и это вызывает ошибку error C2086: 'CSpecSizeModel i' : redefinition Почему? |
||||
|
|||||
| Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Попробуй воспользоваться ф-й
Добавлено через 1 минуту и 5 секунд возможно компилятор принимает
за объявлени функции, хотя я не уверен в этом.... |
||||
|
|||||
| Dims |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
1) Сперва я сделал тайпдеф:
не помогло. 2) Потом я записал вот так
и тогда стало компилироваться. |
||||
|
|||||
| UnrealMan |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Это действительно объявление функции. Добавлено через 2 минуты и 36 секунд Если конструктор CSpecSizeModel для i не является explicit, то достаточно будет записать так:
|
||||||
|
|||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
а можно полюбопытствовать в роли чего в
выступает i ? |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
В роли имени параметра функции
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
а тип где?
Добавлено через 26 секунд или я чето не догоняю.... просьба сжалиться и объяснить чуть подробнее |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
В стандарте написано, все что может быть объявлением, должно быть объявлением. поэтому код:
pair<CSpecSizeModel,CSpecSizeModel> ans(CSpecSizeModel(i),CSpecSizeModel(i)); компилятор видит, как: type1 ans(type2 (i), type2(i)); Из которого убираются лишние скобки: type1 ans(type2 i, type2 i); и лишние имена переменных: type1 ans(type2, type2); А это уже объявление функции. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Сильно меня перехваливать не стоит. Я позаимствовал этот способ демонстрации из книги: "Герб Саттер - Новые сложные задачи на C++"
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Кажись, никто не осветил собственно решение этой коллизии, вот оно (взято, естественно, всё оттуда же):
|
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Слишком много скобок. Проще C-каст сделать.
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
а чем std::pair <X,X> p = std::make_pair(X(i), X(i)); не подходит? Это сообщение отредактировал(а) baldina - 8.12.2007, 03:24 |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
тем, что оно ограничивает область преобразования. Тем, что я знаю, делает ли компилятор физические преобразования (static_cast), логические (reinterpret_cast), вниз по иерархии классов (dynamic_cast), или же опасную отмену константности (const_cast). Разделение обязанностей. Разделяй и властвуй. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |