Создаю шаблон класса:
| Код | template <typename tname,typename tvalue,typename tsize> class object { private: tname name; //Имя объекта tvalue value; //Велечина tsize size; //Размерность велечины public: object(tname name,tvalue value,tsize size) { set(name,value,size); } object() { } void set(tname name,tvalue value,tsize size) { this->name=name; this->value=value; this->size=size; } friend ostream & operator<<(ostream & out, object<tname,tvalue,tsize> & obj); bool operator<(object<tname,tvalue,tsize> & obj) { if (size!=obj.size) return (size<obj.size); else return (value<obj.value); } };
|
Пишу функцию:
| Код | template <typename tname,typename tvalue,typename tsize> ostream & operator<<(ostream & out, object<tname,tvalue,tsize> & obj) { if (obj.size>0) out<<"Name="<<obj.name<<"; Value="<<obj.value<<"e+"<<obj.size<<"\t\t"; else out<<"Name="<<obj.name<<"; Value="<<obj.value<<"e"<<obj.size<<"\t\t"; return out; }
|
Инициализирую массивы классов и пытаюсь их напечатать:
| Код | int main() { //Инициализация //Статически object<string,double,int> Physics[] = { object<string,double,int> ("P",10.1,5), object<string,double,int> ("T",300,1), object<string,double,int> ("V",6.51,3), object<string,double,int> ("M",6.2,-2), }; //Динамически object<int,int,double> *Math; Math = new object<int,int,double>[n]; Math[0].set(1,10,1.5); Math[1].set(2,12,1.7); Math[2].set(3,14,2.3); Math[3].set(4,16,1.2);
print< object<string,double,int>,object<int,int,double> >(Physics,Math,"Input"); return 0; }
|
Получаю 2 ошибки линка (привожу одну из них, вторая аналогичная, видимо для второго параметра):
| Код | 1>main.obj : error LNK2019: unresolved external symbol "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,class object<int,int,double> &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$object@HHN@@@Z) referenced in function "void __cdecl print<class object<class std::basic_string<char,struct std::char_traits<char>, class std::allocator<char> >,double,int>,class object<int,int,double> >(class object <class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >, double,int> * const,class object<int,int,double> * const,class std::basic_string<char, struct std::char_traits<char>,class std::allocator<char> >)" (??$print@V?$object@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D @2@@std@@NH@@V?$object@HHN@@@@YAXQAV?$object@V?$basic_string@DU?$ char_traits@D@std@@V?$allocator@D@2@@std@@NH@@QAV?$object@HHN@@V?$basic_string@DU?$ char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
|
З.Ы. VS2008
|