Я искал дубликаты этого, но простите меня, если я пропустил решение.
У меня есть умный указатель, который имеет 2 перегрузки сравнения: "==" и "<".Оба они работают только с указателем (унаследованный код до того, как меня отчитали).Однако при компиляции я получаю ошибку C2244 для обоих.Я представлю случай только для оператора равенства, поскольку другой почти такой же: </p>
Ошибка 4, ошибка C2244: 'SmartRef :: operator ==': невозможно сопоставить определение функции с существующимобъявление q: \ projs \ ha \ src \ SmartRef.cpp 114
Следующий код прекрасно работает в VC4.2 (я портирую на VC2008 ... мужество).
SmartRef.h
#ifndef HA_INCL_REFERENCE
#define HA_INCL_REFERENCE 1
template <class TypeRefObj>
class SmartRef
{
public:
//@cmember Default constructor
inline SmartRef();
//@cmember Constructor
inline SmartRef( TypeRefObj * pThePointer );
//@cmember Destructor
inline ~SmartRef();
//@cmember Copy constructor
inline SmartRef( const NIEB_clReference< TypeRefObj > & roTheValue );
//@cmember
inline const SmartRef< TypeRefObj > & operator= ( const SmartRef< TypeRefObj > & roTheValue );
//@cmember
inline SmartRef< TypeRefObj > & operator= ( const SmartRef * pTheValue );
//@cmember
inline int operator== ( const SmartRef< TypeRefObj > & roTheValue ) const;
//@cmember
inline int operator< ( const SmartRef< TypeRefObj > & roTheValue ) const;
//@cmember
inline TypeRefObj & operator* () const;
//@cmember
inline TypeRefObj * operator-> () const;
private:
//@cmember Reference pointer
TypeRefObj * m_pRefPointer;
};
#include "SmartRef.cpp"
#endif //HA_INCL_REFERENCE
SmartRef.cpp
template <class TypeRefObj>
inline int SmartRef< TypeRefObj >::operator==
( SmartRef< TypeRefObj > & roTheValue ) const
{
return m_pRefPointer == roTheValue.m_pRefPointer;
}
Сначала я подумал, что возникла проблема, поскольку не было сравненияв специализированных классах, но потом я понял, что сравниваю указатели, а не объекты.Тогда я подумал, что, может быть, мне нужно быть очень откровенным об этом, поэтому я сравниваю обе стороны сравнения с `void *, но это не имеет значения.Так что теперь я думаю, что есть некоторая причина, по которой это определение недействительно в VC 2008. Но я не могу понять, что не так с определением.
Любая помощь очень ценится.Спасибо, Деннис.
* РЕДАКТИРОВАТЬ: * Я смущен, что это было так просто.Мне не хватало const из определения.Спасибо всем, я не знаю, как мне не удалось это обнаружить!Приз идет к первому правильному ответу.