![]() |
|
Модераторы: bsa |
![]()
|
|
| Dims |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Хорошо, Вы правы, проверяется доступность. Но конструктор явно упоминается в выражении. Пример полностью аналогичен нижеследующему:
То есть, вы просто пытаетесь получить свойство члена, вам недоступного. Тут ни причём копирующие конструкторы и throw. Такой код всегда будет вызывать ошибку. И место, в котором это происходит, можно указать пальцем (см. комментарий). Можете проделать то же самое с моим примером с ostringstream? |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
с той лишь разностью, что в Вашем случае проверка осуществляется программистом, а в моем компилятором, и мой код лишь грубая иллюстрация проверки. сейчас я на секундочку заскочил, вернусь - попробую разобраться, что Вы просите проделать .. если что, может перефразируете, что именно не понятно, так как мне кажется что нить Вашей логики я упустил.. Это сообщение отредактировал(а) mes - 6.3.2010, 16:17 |
|||
|
||||
| Dims |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Я нашёл, в чём глюк. Ниже код.
Классы D и E оба наследуют от A (причём, D делает это косвенно и имея A виртуальным предком). В A конструктор копирования приватный (для всех), но это не мешает копировать и присваивать как D, так и E, так как в них определены свои конструкторы. Однако, стоит применить throw, возникает ошибка, причём только для класса D. Отсюда следует, что ошибка возникает в коде компиллятора, который он составляет, когда у него есть виртуальный предок...
Добавлено через 7 минут и 43 секунды P.S. Конечно, я забыл return *this; в операторе присваивания... Проверка компилятором codepad подтверждает гипотезу, что я напал на след: http://codepad.org/Otzbacg6 Компилятор тут показывает ошибку точнее, чем VS, но и здесь ошибочным является только код D, но не E. Осталось ещё разобраться, как удовлетворить "should be explicitly initialized in the copy constructor", ну и понять, откуда это требование возникает... Добавлено через 9 минут и 7 секунд
Не понял. Обоснуйте это утверждение. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
...
Это сообщение отредактировал(а) mes - 6.3.2010, 19:23 |
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
перечитал еще раз топик, вроде разобрался где свернули в разные стороны.
сейчас объясню. Добавлено @ 19:15
вот тут Вас интересует почему возникает ошибка компиляции, а не почему так нельзя делать.
вот теперь компилируется : http://codepad.org/dSptN7Fb, но за работоспособность не ручаюсь - не настолько хорошо знаю язык , в душе и по обоснованиям изложенных выше полагаю что ill formed ответ устраивает или я опять не на то ответил ? Это сообщение отредактировал(а) mes - 6.3.2010, 19:20 |
||||||
|
|||||||
![]()
|
| Правила форума "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. |