![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| PirateTigo |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
В общем у меня есть шаблон класса, в котором определена функция Save:
Ее реализация лежит в том же файле:
При линковке происходит ошика:
Подскажите, пожалуйста, что я сделал не так? Заранее благодарен |
||||||
|
|||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
написано, что не реализован оператор >>
|
|||
|
||||
| PirateTigo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
В том то и дело, что он реализован! И когда я комменчу определение и реализацию функции Save, то все линкуется на ура..
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| PirateTigo |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
Пожалуйста: [/code]
Это сообщение отредактировал(а) PirateTigo - 11.8.2008, 11:24 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
что тут <> означает? |
|||
|
||||
| PirateTigo |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
Весь код лежит в одном файле "List.h" Добавлено через 2 минуты и 28 секунд
http://forum.vingrad.ru/forum/topic-223092...tor-friend.html Вот старая тема, тут все освещено |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не знаю, где ты это правило взял
напиши (прям в классе) так
и не мучься |
|||
|
||||
| PirateTigo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
Вот здесь взял: http://www.parashift.com/c++-faq-lite/temp....html#faq-35.16 Сделал как ты сказал, все работает, но все же это не решение проблемы, я думаю... |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
почему ты так думаешь? ты реализовал друга прямо в классе Добавлено @ 13:13 кстати говоря, в твоем случае friend не нужен - вынеси ф-ю из класса Это сообщение отредактировал(а) Alek86 - 11.8.2008, 13:14 |
|||
|
||||
| PirateTigo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
Ок, тема закрыта, всем спасибо..
|
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Это называется "тупо изменяем код до тех пор, пока не начнёт компилироваться". А то, что компилироваться при этом будет не корректная с точки зрения языка программа, а полная чушь - дело десятое Прежде чем делать что-то со специализациями класса (в т.ч. объявлять их друзьями кого-то), нужно объявить первичный шаблон - в данном случае это значит поместить перед определением шаблона List
Это сообщение отредактировал(а) UnrealMan - 11.8.2008, 16:35 |
|||
|
||||
| PirateTigo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
Я вверху дал ссылку, где об "этом" подробно написано! Так что, не нужно обвинять меня в безрассудстве действий! Это сообщение отредактировал(а) PirateTigo - 11.8.2008, 20:34 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вообще-то он по делу говорит и в приведеной тобой ссылке то же самое написано, что и у него |
|||
|
||||
| PirateTigo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
Вообще-то там приводится три выхода из ситуации, один из них мой. Поэтому не правда, что я сделал не подумав. |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Ответь на пару вопросов: 1) что в твоём примере делает следующая строчка? friend std::istream &operator>><>(std::istream &,List<T> &); 2) Что в этой строчке означает <>? |
|||
|
||||
| PirateTigo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
Я не отвечаю на 100%, что это так. Так как сам ничего об этом раньше не слышал. Но раз в статье написано, что это решает проблему, то почему бы и не использовать эту "magic stuff" <>. И в той статье описано, что именно происходит, когда компилятор видит <>: "After the compiler sees that magic stuff, it will be better informed about the friend functions. In particular, it will realize that the friend lines are referring to functions that are themselves templates. That eliminates the confusion." Мне этого описания вполне достаточно для того, чтобы использовать <> в своей программе, и то что я не нашел лучшего вовсе не означает, что я сделал это наобум. |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Я вот только не понял, откуда ты тогда сделал вывод, что
? Почему "либо", когда предварительное объявление шаблона функции просто обязано присутствовать, если ты пишешь
Это сообщение отредактировал(а) UnrealMan - 15.8.2008, 12:09 |
|||
|
||||
| PirateTigo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 4.8.2008 Репутация: нет Всего: нет |
Ну не знаю, как я понял, потому что использование <> - это тоже самое для шаблона френд функции, что и extern для какой-нибудь внешней переменной. Если не так, то поправь меня.
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
как тебя можно поравить, если уже 10 раз было сказано, как нужно писать правильно, а ты все равно стоишь на своем? можно только сказать РТФМ (в частности, "Шаблоны C++") |
|||
|
||||
| bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
PirateTigo
|
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |