2013-05-13 121 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

相關問題