![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 1 Всего: 7 |
Преамбула - всегда объявлял друзей класса прям в тебе класса без всякого forward declartion:
В основном использовал "друзей" для юнит-тестов Недавно коллега увидел это (мы с ним фэйл в юнит-тесте разбирали) и сказал, что так (без forward declaration) по стандарту работать не должно. Я чутка погуглил, но ничего явно запрещающего или явно разрещающего использование "друзей" без форвард декларейшн не нашёл. Подскажите, где в стандарте искать данную инфу? А то тут у нас холивар намечается =) -------------------- Дорогу осилит идущий |
|||
|
||||
| rumit7 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
C++ STANDARD-2003, раздел 11.4.9: "For a friend class declaration, if there is no prior declaration, the class that is specified belongs to the innermost enclosing non-class scope, but if it is subsequently referenced, its name is not found by name lookup until a matching declaration is provided in the innermost enclosing nonclass scope." |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Странный у тебя холивор намечается... Друх сказал тебе что-то с отсылкой на стандарт, так пусть же приведет пруф и тыкнет пальцем прямо в стандарт.
Я холиворить с тобой не собираюсь, поэтому пруфы искать не буду, но скажу: по стандарту то, что указано во friend является декларацией, в т.ч. может быть и форвард дефларацией. Единственая проблема с форвард-декларацией может быть, когда ты френдишь классы из разных нэймспейсов, там есть какой-то замут, связанный с тем, что неизвестный до сих пор символ будет забинден в текущей неймспейс, т.е. френдить класс из другого неймспейса предварительно не задикларировав его нельзя. -------------------- You're face to face With man who sold the world |
|||
|
||||
| rumit7 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
Раскомментируйте и ошибка компиляции исчезнет. |
||||||
|
|||||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Вот rumit7 умничка написал кодом про неймспейсы то, что я вылила в потоке сознания )))
-------------------- You're face to face With man who sold the world |
|||
|
||||
| rumit7 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.6.2011 Репутация: 6 Всего: 7 |
..только вот у Вас как всегда лучше получилось.. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
решаемо
|
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Ты руками сделал форвард-декларацию, так нечестно, топик о другом.
-------------------- You're face to face With man who sold the world |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
форвард есть, сжульничал. хотел показать что к глобальному namspace доступ можно получить
|
|||
|
||||
| _GRIN_ |
|
||||||||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 1 Всего: 7 |
baldina, gcc твой пример не компилит - гляди лог:
исходник:
попытка компиляции:
Но если работать не со статик-переменными, то всё работает =)
Это сообщение отредактировал(а) _GRIN_ - 8.12.2011, 04:06 -------------------- Дорогу осилит идущий |
||||||||
|
|||||||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 1 Всего: 7 |
rumit7, спасибо за ссылку в стандарте =)
newbee, и тебе спасибо baldina, и тебе =) Тема закрыта -------------------- Дорогу осилит идущий |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
ну так саму переменную где-то определить надо http://liveworkspace.org/code/fadab919a60a...8789c3d6b4e8c83 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |