![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Ander |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 17.11.2003 Где: Рига, Латвия Репутация: нет Всего: 1 |
Почему работает вариант 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 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 24.1.2004 Где: Украина, харьков Репутация: нет Всего: нет |
Потому что в варианте а ты вызываешь функцию у которой нет тела
|
|||
|
||||
Ander |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 17.11.2003 Где: Рига, Латвия Репутация: нет Всего: 1 |
А это что?
template<class T> void some_class::callfunc(T var) { } да, там кстати везде после template идёт <class T> Это сообщение отредактировал(а) Ander - 10.6.2004, 20:46 |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Ander поправил и мне пришлось исправить
![]() ... ... ... в варианте а) - по ходу должна быть ошибка в специализации функции. Это сообщение отредактировал(а) bel_nikita - 10.6.2004, 21:21 |
|||
|
||||
Ander |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 17.11.2003 Где: Рига, Латвия Репутация: нет Всего: 1 |
По ходу она и есть: error C2893: Failed to specialize function template бла бла бла With the following template arguments: 'int'
Но почему? Причём соединив всё в один файл работает и вариант а) От этого конечно функциональность не страдает, но неудобно же ей богу всё в одном файле держать, тем более что классы громоздкие. |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Ander
компиллер MSVC6 ? .... Ага точно, он самый. Глюки с объявлениями и определениями. Во втором случае объявление функции является ее определением. А в первом ... Хм... Фиг его знает. VC6 вообще-то с шаблонами не очень ![]() Если не секрет: А зачем классовую функцию делать шаблонной? Тогда уж шаблонный класс делай. Чем перегрузка не подходит? |
|||
|
||||
Ander |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 17.11.2003 Где: Рига, Латвия Репутация: нет Всего: 1 |
Да вот просто захотелось понять, почему не работает именно такой вариант. Не люблю, когда что-то не понимаю.
|
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
![]() После получаса экспериментов с шаблонами MSVC6 посылает меня на ... INTERNAL COMPILER ERROR На других пробывал? Мне тоже интересно, что в такой ситуации происходит ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |