Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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 поправил и мне пришлось исправить rolleyes.gif
...
...
...

в варианте а) - по ходу должна быть ошибка в специализации функции.

Автор: 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 вообще-то с шаблонами не очень mad.gif Иногда такие, млин, падлы выкидывает.

Если не секрет: А зачем классовую функцию делать шаблонной? Тогда уж шаблонный класс делай. Чем перегрузка не подходит?

Автор: Ander 10.6.2004, 23:17
Да вот просто захотелось понять, почему не работает именно такой вариант. Не люблю, когда что-то не понимаю.

Автор: bel_nikita 10.6.2004, 23:27
Цитата
Да вот просто захотелось понять, почему не работает именно такой вариант. Не люблю, когда что-то не понимаю
И не поймешь, потому, что это VC6 biggrin.gif
После получаса экспериментов с шаблонами MSVC6 посылает меня на ... INTERNAL COMPILER ERROR
На других пробывал?
Мне тоже интересно, что в такой ситуации происходит hehe.gif




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)