Здравствуйте, JohnPreston, Вы писали:
C>>>>Вынес определение шаблона и/или шаблонных функций в отдельную единицу трансляции, сделав его недоступным для единицы, содержащей main?
JP>>>эмм... нет, все в одном файле идет
NB>>а если функцию заменить на NB>>?
JP>слишком много параметров для бинарной операции. она все-таки френдовая должна быть, только шаблон никак не прикручивается
ну, Егор уже сказал, что чтоб френдовая функция была шаблонной надо <> поставить после названия.
скорее всего еще ее объявление надо будет перед классом поместить.
вобщем, проще прямо в самом классе поместить определение и не мучится.
Здравствуйте, Centaur, Вы писали:
C>Здравствуйте, JohnPreston, Вы писали:
JP>>error LNK2019: ссылка на неразрешенный внешний символ "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Array<int,5> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$Array@H$04@@@Z) в функции _main
JP>>что не так?
C>Вынес определение шаблона и/или шаблонных функций в отдельную единицу трансляции, сделав его недоступным для единицы, содержащей main?
эмм... нет, все в одном файле идет
Re: перегрузка оператора вывода в шаблонном классе
Функция не шаблонная, на самом деле. Так что проще всего будет написать там кроме friend ещё и inline и опредялять функцию прямо там же...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: перегрузка оператора вывода в шаблонном классе
Здравствуйте, JohnPreston, Вы писали:
JP>>>error LNK2019: ссылка на неразрешенный внешний символ "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Array<int,5> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$Array@H$04@@@Z) в функции _main
JP>>>что не так?
C>>Вынес определение шаблона и/или шаблонных функций в отдельную единицу трансляции, сделав его недоступным для единицы, содержащей main?
JP>эмм... нет, все в одном файле идет
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, JohnPreston, Вы писали:
JP>>>>error LNK2019: ссылка на неразрешенный внешний символ "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class Array<int,5> const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$Array@H$04@@@Z) в функции _main
JP>>>>что не так?
C>>>Вынес определение шаблона и/или шаблонных функций в отдельную единицу трансляции, сделав его недоступным для единицы, содержащей main?
JP>>эмм... нет, все в одном файле идет
NB>а если функцию заменить на NB>
Здравствуйте, night beast, Вы писали:
NB>ну, Егор уже сказал, что чтоб френдовая функция была шаблонной надо <> поставить после названия. NB>скорее всего еще ее объявление надо будет перед классом поместить. NB>вобщем, проще прямо в самом классе поместить определение и не мучится.
Если кто не понял, то я имею в виду, что-то вроде:
#include <iostream>
template<typename T>
struct S {
T F;
friend inline void f( const S<T>& o ) { std::cout << o.F; }
};
int main()
{
S<int> s = { 1 };
f( s );
return 0;
}
Второй, не менее прямой, кстати, путь, состоит в том, чтобы написать у класса шаблон публичного метода DumpToStream, параметризованного потоком, и потом завести просто отдельный шаблон operator<< с соответствующими аргументами...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: перегрузка оператора вывода в шаблонном классе