Redefinition == previous Definition?
-
Hallo,
ich versuch mich gerade an einer Smartpointer Klasse und GCC spuckt da ne Fehlermeldung aus die ich beim besten Wille nicht versteh:
main.cpp:68: redefinition of
template<class T1, class T2> bool operator!=(const lock\_ptr<Derived>&, const lock\_ptr<T2>&)' main.cpp:68:
template<class T1, class T2> bool operator!=(const
lock_ptr<Derived>&, const lock_ptr<T2>&)' previously declared hereDas Eigenartige dabei ist allerdings, es handlet sich 2 Mal um die gleiche Definition
.
Hier ist Code der gesamten Klasse:
typedef unsigned uint; template<class Base> class lock_ptr{ template<class T> friend class lock_ptr; Base*ptr; uint*lock; void release()throw(){ --*lock; if(!*lock){ delete lock; delete ptr; } } public: lock_ptr(Base*ptr=0): ptr(ptr),lock(new uint){ *lock=1; } template<class Derived> lock_ptr(const lock_ptr<Derived>&other): ptr(other.ptr),lock(other.lock){ ++*lock; } template<class Derived> lock_ptr&operator=(const lock_ptr<Derived>&other){ release(); ptr=other.ptr; lock=other.lock; ++*lock; return*this; } lock_ptr&operator=(Base*new_ptr){ release(); ptr=new_ptr; lock=new uint; *lock=1; } ~lock_ptr(){ release(); } Base&operator*(){ return*ptr; } const Base&operator*()const{ return*ptr; } Base*operator->(){ return ptr; } const Base*operator->()const{ return ptr; } Base*get(){ return ptr; } const Base*get()const{ return ptr; } operator bool()const{ return ptr; } template<class T1,class T2> friend bool operator==(const lock_ptr<T1>&t1,const lock_ptr<T2>&t2){ return t1.get()==t2.get(); } template<class T1,class T2> friend bool operator!=(const lock_ptr<T1>&t1,const lock_ptr<T2>&t2){ return t1.get()!=t2.get(); } }; class A{}; class B:public A{}; int main(){ lock_ptr<B>ptr=new B; lock_ptr<A>ptr2=ptr; ptr==ptr2; }
Auch und wo wir schon dabei sind dynamic_cast und static_cast kann man (ohne Macros) nicht überladen oder?
-
Du willst doch nicht eine Funktion, die friend ist, innerhalb der Klasse definieren?