我需要在C++中编写一种shared_ptr <>。不过,我现在正在努力处理一个奇怪的错误。
下面的代码:在构造函数中传递类成员时出现C++语法错误
template <typename T> class shared_ptr;
typedef std::map<void*, shared_ptr<void*>> ptr_t;
ptr_t ptr_set;
template <typename T> class shared_ptr
{
T* ptr;
public:
bool in_use;
shared_ptr<T>()
{
ptr = new T;
in_use = false;
ptr_set.insert(ptr_t::value_type(ptr, *this)); // the error is here
}
T operator*()
{
return *ptr;
}
shared_ptr<T>(shared_ptr<T>& ref)
{
this->in_use = false;
this->ptr = ref.ptr;
T* p = this->ptr;
ptr_set.insert(ptr_t::value_type(p, *this));
}
};
拒绝编译说“的std ::对< _Ty1,_Ty2> ::对:没有2个重载可以转换所有的参数类型”(C2665在13号线实际)。
顺便说一下,shared_ptr在main()中被实例化为shared_ptr<array_t> a
,其中array_t
是一个只包含一个简单数组的结构(我不认为这是错误的实际来源)。有任何想法吗?
在此先感谢。
P.S.答案已被编辑以修正错字(第13行的p而不是ptr)。