2013-05-13 119 views
-1

我需要在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)。

回答

2

当然,你会得到一个错误,因为shared_ptr< T* >不能被铸造到shared_ptr< void* >除了Tvoid。为了解决它,你可以添加一个铸造操作符到你的shared_ptr类,这将铸造任何类型shared_ptr< void* >

0

带有错误的行是指p尚未声明。你的意思是说ptr

相关问题