Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Траблы с шаблонами |
Автор: Ander 10.6.2004, 18:51 |
Почему работает вариант b) и не работает вариант а)? a) // SomeClass.h #ifndef _SOMECLASS_ #define _SOMECLASS_ class some_class { public: some_class(){} ~some_class(){} template void callfunc(T var); }; template void some_class::callfunc(T var) { } #endif b) // SomeClass.h #ifndef _SOMECLASS_ #define _SOMECLASS_ class some_class { public: some_class(){} ~some_class(){} template void callfunc(T var){} }; #endif //main.cpp #include "SomeClass.h" void main(void) { some_class example; int nt=4; example.callfunc(nt); } |
Автор: Stalk 10.6.2004, 20:09 |
Потому что в варианте а ты вызываешь функцию у которой нет тела |
Автор: Ander 10.6.2004, 20:44 |
А это что? template<class T> void some_class::callfunc(T var) { } да, там кстати везде после template идёт <class T> |
Автор: bel_nikita 10.6.2004, 21:02 |
Ander поправил и мне пришлось исправить ![]() ... ... ... в варианте а) - по ходу должна быть ошибка в специализации функции. |
Автор: Ander 10.6.2004, 22:44 |
По ходу она и есть: error C2893: Failed to specialize function template бла бла бла With the following template arguments: 'int' Но почему? Причём соединив всё в один файл работает и вариант а) От этого конечно функциональность не страдает, но неудобно же ей богу всё в одном файле держать, тем более что классы громоздкие. |
Автор: bel_nikita 10.6.2004, 23:07 |
Ander компиллер MSVC6 ? .... Ага точно, он самый. Глюки с объявлениями и определениями. Во втором случае объявление функции является ее определением. А в первом ... Хм... Фиг его знает. VC6 вообще-то с шаблонами не очень ![]() Если не секрет: А зачем классовую функцию делать шаблонной? Тогда уж шаблонный класс делай. Чем перегрузка не подходит? |
Автор: Ander 10.6.2004, 23:17 |
Да вот просто захотелось понять, почему не работает именно такой вариант. Не люблю, когда что-то не понимаю. |
Автор: bel_nikita 10.6.2004, 23:27 | ||
![]() После получаса экспериментов с шаблонами MSVC6 посылает меня на ... INTERNAL COMPILER ERROR На других пробывал? Мне тоже интересно, что в такой ситуации происходит ![]() |