![]() |
|
Модераторы: bsa |
![]()
|
|
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Почему такой код
вызывает такие ошибки Error 1 error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>' c:\program files\microsoft visual studio 9.0\vc\include\sstream 451 Test_ostringstream Error 2 error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>' c:\program files\microsoft visual studio 9.0\vc\include\ostream 584 Test_ostringstream ? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
почитай о требованиях к классу исключения, исключение должно иметь конструктор копирования и оператор присваивания
|
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
А как можно это обойти в данном случае?
И почему я могу throw-ить произвольный свой класс без таких операторов? Вот так работает:
|
|||
|
||||
| TGrey |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 1.12.2007 Репутация: нет Всего: 1 |
А можно через проверку?
|
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
потому что у исключения другое время жизни, нежели у переменной определенной в блоке, ну а чтоб задать новую длину жизни необходимо уметь копировать его, о чем и сказано в цитате Lazin`a Потому что имеются нужные операторы .. некоторые операторы добавляются скрыто в случае если не определены программистом.. те что требуются относятся к числу подобных. |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Непонятно.
Во-первых, какими образом и с какой целью достигнуто, чтобы ostringstream нельзя было копировать? Во-вторых, почему тогда вот это компилируется нормально:
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
компилятор же говорит : для того чтоб исключить возможное копирование из за невозможности разделения владения данными, можно либо запретить копирования, либо расшарить внутренние данные. второе требует дополнительных ресурсов плюс для этой задачи излишне, поэтому выбор пал на первое а это вопрос к VS |
|||
|
||||
| bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Dims, а ты попробуй такой код:
Это сообщение отредактировал(а) bsa - 5.3.2010, 01:09 |
||||||
|
|||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
чтоб можно было начать объяснять результаты, надо ко всем классам имеющим закрытый констуктор копий добавить открытый конструктор по умолчанию. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Первый пример: ругается линкер: Error 1 error LNK2001: unresolved external symbol "private: __thiscall A::A(class A const &)" (??0A@@AAE@ABV0@@Z) Test_ostringstream.obj Test_ostringstream Ошибка понятна: конструктор объявлен, вызывается, но не определён. Второй пример: не ругается. Понятно: хотя конструктор не определён, но он и не используется. Третий пример: ругается компилятор: Error 1 error C2248: 'A::A' : cannot access private member declared in class 'A' А какое это имеет отношения к моему примеру? Добавлено через 3 минуты и 28 секунд Ребят, скажите пожалуйста, откуда вообще всплыла эта тема? Судя по моей проверке вот тут: http://forum.vingrad.ru/index.php?showtopi...t&p=2109522 В классе ostringstream присутствуют и доступны как конструктор копирования по ссылке, так и оператор присваивания. Поэтому почему вы думаете, что дело в их отсутствии? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |