| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Не разберусь с шаблонами |
| Автор: PirateTigo 11.8.2008, 09:28 | ||||||
В общем у меня есть шаблон класса, в котором определена функция Save:
Ее реализация лежит в том же файле:
При линковке происходит ошика:
Подскажите, пожалуйста, что я сделал не так? Заранее благодарен |
| Автор: Alek86 11.8.2008, 10:26 |
| написано, что не реализован оператор >> |
| Автор: PirateTigo 11.8.2008, 11:15 |
| В том то и дело, что он реализован! И когда я комменчу определение и реализацию функции Save, то все линкуется на ура.. |
| Автор: mes 11.8.2008, 11:18 |
можно код? |
| Автор: PirateTigo 11.8.2008, 11:23 | ||||
Пожалуйста: [/code]
|
| Автор: mes 11.8.2008, 12:24 |
надеюсь она тоже в хидере ? |
| Автор: Alek86 11.8.2008, 12:27 | ||
что тут <> означает? |
| Автор: PirateTigo 11.8.2008, 12:28 | ||||
Весь код лежит в одном файле "List.h" Добавлено через 2 минуты и 28 секунд
http://forum.vingrad.ru/forum/topic-223092/kw-%D0%BB%D0%B8%D0%BD%D0%BA%D0%B5%D1%80-lnk-2019-operator-friend.html Вот старая тема, тут все освещено |
| Автор: Alek86 11.8.2008, 12:37 | ||
| не знаю, где ты это правило взял напиши (прям в классе) так
и не мучься |
| Автор: PirateTigo 11.8.2008, 12:53 | ||
Вот здесь взял: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.16 Сделал как ты сказал, все работает, но все же это не решение проблемы, я думаю... |
| Автор: Alek86 11.8.2008, 13:11 |
почему ты так думаешь? ты реализовал друга прямо в классе Добавлено @ 13:13 кстати говоря, в твоем случае friend не нужен - вынеси ф-ю из класса |
| Автор: PirateTigo 11.8.2008, 13:28 |
| Ок, тема закрыта, всем спасибо.. |
| Автор: UnrealMan 11.8.2008, 16:18 | ||
Это называется "тупо изменяем код до тех пор, пока не начнёт компилироваться". А то, что компилироваться при этом будет не корректная с точки зрения языка программа, а полная чушь - дело десятое Прежде чем делать что-то со специализациями класса (в т.ч. объявлять их друзьями кого-то), нужно объявить первичный шаблон - в данном случае это значит поместить перед определением шаблона List
|
| Автор: PirateTigo 11.8.2008, 20:32 | ||
Я вверху дал ссылку, где об "этом" подробно написано! Так что, не нужно обвинять меня в безрассудстве действий! |
| Автор: Alek86 11.8.2008, 22:36 |
вообще-то он по делу говорит и в приведеной тобой ссылке то же самое написано, что и у него |
| Автор: PirateTigo 13.8.2008, 19:22 | ||
Вообще-то там приводится три выхода из ситуации, один из них мой. Поэтому не правда, что я сделал не подумав. |
| Автор: PirateTigo 15.8.2008, 04:53 | ||
Я не отвечаю на 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 15.8.2008, 12:08 | ||||
Я вот только не понял, откуда ты тогда сделал вывод, что
Почему "либо", когда предварительное объявление шаблона функции просто обязано присутствовать, если ты пишешь
|
| Автор: PirateTigo 19.8.2008, 12:57 |
| Ну не знаю, как я понял, потому что использование <> - это тоже самое для шаблона френд функции, что и extern для какой-нибудь внешней переменной. Если не так, то поправь меня. |
| Автор: Alek86 19.8.2008, 13:23 |
как тебя можно поравить, если уже 10 раз было сказано, как нужно писать правильно, а ты все равно стоишь на своем? можно только сказать РТФМ (в частности, "Шаблоны C++") |
| Автор: bsa 19.8.2008, 14:23 | ||||||
PirateTigo
|