Всем привет.
У меня небольшая проблема:
имеется класс Foo
template<class T,Int Dim>
struct Foo
: public T
{
public:
...
private:
static inline Void add(Foo<T,Dim>& v1,const Foo<T,Dim>& v2,const Foo<T,Dim>& v3);
...
}
и глобальный оператор
template< class T> inline
T operator + ( const T& v1, const T& v2 ){T v;v.add(v,v1,v2);return v;}
(Всё это находится в неймспейсе)
Мне надо сделать его другом : я пробывал писать
template<class T,Int Dim>
struct Foo
: public T
{
friend inline Foo<T,Dim> operator + ( const Foo<T,Dim>& v1, const Foo<T,Dim>& v2 );
public:
...
}
Компилится но не работает.
Как опредилить правильно друга?
Заранее спасибо.
Здравствуйте, Аноним, Вы писали:
Попробуй
определить свой оператор там, где ты объявляешь его другом.
А>А>template< class T> inline
А>T operator + ( const T& v1, const T& v2 ){T v;v.add(v,v1,v2);return v;}
А>(Всё это находится в неймспейсе)
А>Мне надо сделать его другом : я пробывал писать
А>template<class T,Int Dim>
А>struct Foo
А>: public T
А>{
А>friend Foo<T,Dim> operator + ( const Foo<T,Dim>& v1, const Foo<T,Dim>& v2 )
A>{T v;v.add(v,v1,v2);return v;}
А>public:
А>...
А>}
А>
Здравствуйте, Alxndr, Вы писали:
A>Попробуй определить свой оператор там, где ты объявляешь его другом.
Неа сам допер,что надо было определить
не
template< class T> inline
T operator + ( const T& v1, const T& v2 ){T v;v.add(v,v1,v2);return v;}
а
template<class T,Int Dim> inline
Foo<T,Dim> operator + ( const Foo<T,Dim>& v1, const Foo<T,Dim>& v2 )
{Foo<T,Dim> v;v.add(v,v1,v2);return v;}
всеравно спасибо