用户自定义转换不能指定 return 类型
User-defined conversion cannot specify return type
我正在使用模板实现 unqiue 智能指针,但我一直收到编译器错误,提示用户定义转换无法指定 return 类型。下面是我的头文件和 cpp 文件的代码。错误发生在 .h 的第 15 行和 .cpp 的第 48 行我已经尝试使用模板而不是使用模板,但它也不起作用。
//header
#ifndef UNIQUE_SMART_POINTER_H
#define UNIQUE_SMART_POINTER_H
#include <iostream>
using namespace std;
template <typename T>
class UniqueSmartPointer
{
private:
T *ptr;
public:
UniqueSmartPointer(T * p = nullptr);
UniqueSmartPointer(UniqueSmartPointer&ref);
const T* get()const;
T & operator* ();
T * operator-> ();
void reset(T *);
T * release();
bool operator bool();
//void swap(T x);
UniqueSmartPointer& operator=(UniqueSmartPointer& ref);
UniqueSmartPointer& operator=(UniqueSmartPointer && ref);
};
#endif
这是 cpp
#include "UniqueSmartPointer.h"
#include <iostream>
using namespace std;
template<typename T>
UniqueSmartPointer<T>::UniqueSmartPointer(T * p): ptr(p)
{
}
template<typename T>
const T* UniqueSmartPointer<T>::get()const
{
return ptr;
}
template<typename T>
T & UniqueSmartPointer<T>::operator* ()
{
return *ptr;
}
template<typename T>
T * UniqueSmartPointer<T>::operator-> ()
{
return ptr;
}
template<typename T>
void UniqueSmartPointer<T>::reset(T * p)
{
if (ptr)
{
delete ptr;
}
ptr = p;
}
template<typename T>
T * UniqueSmartPointer<T>::release()
{
T * temp = ptr;
ptr = nullptr;
return temp;
}
template<typename T>
bool UniqueSmartPointer<T>::operator bool()
{
if (ptr)
return true;
return false;
}
template<typename T>
UniqueSmartPointer<T>& UniqueSmartPointer<T>::operator=(UniqueSmartPointer& ref)
{
if (*this == &ref)
return *this;
if (ptr)
delete ptr;
ptr = ref.ptr;
ref.ptr = nullptr;
}
template<typename T>
UniqueSmartPointer<T>::UniqueSmartPointer(UniqueSmartPointer<T> &ref)
{
ptr = ref.ptr;
ref.ptr = nullptr;
}
template<typename T>
UniqueSmartPointer<T> & UniqueSmartPointer<T>::operator=(UniqueSmartPointer<T> && ref)
{
if (*this == &ref)
return *this;
if (ptr)
delete ptr;
ptr = ref.ptr;
ref.ptr = nullptr;
}
bool operator bool();
应该只是:
/*explicit*/ operator bool() /*const*/;
等等
template<typename T>
UniqueSmartPointer<T>::operator bool() const
{
return ptr != nullptr;
}
我正在使用模板实现 unqiue 智能指针,但我一直收到编译器错误,提示用户定义转换无法指定 return 类型。下面是我的头文件和 cpp 文件的代码。错误发生在 .h 的第 15 行和 .cpp 的第 48 行我已经尝试使用模板而不是使用模板,但它也不起作用。
//header
#ifndef UNIQUE_SMART_POINTER_H
#define UNIQUE_SMART_POINTER_H
#include <iostream>
using namespace std;
template <typename T>
class UniqueSmartPointer
{
private:
T *ptr;
public:
UniqueSmartPointer(T * p = nullptr);
UniqueSmartPointer(UniqueSmartPointer&ref);
const T* get()const;
T & operator* ();
T * operator-> ();
void reset(T *);
T * release();
bool operator bool();
//void swap(T x);
UniqueSmartPointer& operator=(UniqueSmartPointer& ref);
UniqueSmartPointer& operator=(UniqueSmartPointer && ref);
};
#endif
这是 cpp
#include "UniqueSmartPointer.h"
#include <iostream>
using namespace std;
template<typename T>
UniqueSmartPointer<T>::UniqueSmartPointer(T * p): ptr(p)
{
}
template<typename T>
const T* UniqueSmartPointer<T>::get()const
{
return ptr;
}
template<typename T>
T & UniqueSmartPointer<T>::operator* ()
{
return *ptr;
}
template<typename T>
T * UniqueSmartPointer<T>::operator-> ()
{
return ptr;
}
template<typename T>
void UniqueSmartPointer<T>::reset(T * p)
{
if (ptr)
{
delete ptr;
}
ptr = p;
}
template<typename T>
T * UniqueSmartPointer<T>::release()
{
T * temp = ptr;
ptr = nullptr;
return temp;
}
template<typename T>
bool UniqueSmartPointer<T>::operator bool()
{
if (ptr)
return true;
return false;
}
template<typename T>
UniqueSmartPointer<T>& UniqueSmartPointer<T>::operator=(UniqueSmartPointer& ref)
{
if (*this == &ref)
return *this;
if (ptr)
delete ptr;
ptr = ref.ptr;
ref.ptr = nullptr;
}
template<typename T>
UniqueSmartPointer<T>::UniqueSmartPointer(UniqueSmartPointer<T> &ref)
{
ptr = ref.ptr;
ref.ptr = nullptr;
}
template<typename T>
UniqueSmartPointer<T> & UniqueSmartPointer<T>::operator=(UniqueSmartPointer<T> && ref)
{
if (*this == &ref)
return *this;
if (ptr)
delete ptr;
ptr = ref.ptr;
ref.ptr = nullptr;
}
bool operator bool();
应该只是:
/*explicit*/ operator bool() /*const*/;
等等
template<typename T>
UniqueSmartPointer<T>::operator bool() const
{
return ptr != nullptr;
}