| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > использование шаблонов |
| Автор: centab 3.5.2006, 13:06 |
| При компиляции возникает ошибка в строке описания заголовка перегрузки функции operator<< Из-за чего это происходит? что здесь не так. #include <iostream> using namespace std; template <class type1, class type2> class telo{ type1 a,b,c; // ??????, ????? ? ?????? ???? type2 dens; // ????????? ???? public: telo(type1 aa=1, type1 bb=1, type1 cc=1, type2 d=1):a(aa),b(bb),c(cc),dens(d){} double volume(void){return a*b*c*dens;} bool operator< (telo& q){ if(this->volume()>q.volume()) return false; return true; } friend ostream& operator<< (ostream& out, telo& t); }; ostream& std::operator<< (ostream& out, telo& t){ out<<"parametres of objects:"<<endl; out<<"width="<<t.a<<endl; out<<"length="<<t.b<<endl; out<<"height="<<t.c<<endl; out<<"density="<<t.dens<<endl<<endl; return out; } int main (){ telo <int,double> a(1,2,3,4.5); return 0; } |
| Автор: Romikgy 3.5.2006, 13:41 | ||
А так? У меня работает |
| Автор: centab 3.5.2006, 14:27 |
| Так работает, спасибо. Но есть вопрос: дружественная функция описана в классе? и в конце стоит ";"? |
| Автор: Daevaorn 3.5.2006, 17:25 |
Ты не можешь сам объявлять что-то в пространстве имен std. Можно и вне. Дело вкуса. В принципе не нужно. Наверно могут возникнуть проблемы с переносимостью. |
| Автор: MAKCim 3.5.2006, 19:51 | ||
хочешь определить вне надо предварительно объявить шаблон функции-друга
|