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