-1

C++ で一種の shared_ptr<> を記述する必要があります。しかし、私は今、奇妙なエラーに苦しんでいます。
次のコード:

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::pair<_Ty1,_Ty2>::pair: none of the 2 overloads could convert the all argument types」(実際には 13 行目の C2665) と言ってコンパイルを拒否します。
ちなみに、shared_ptr は main() で としてインスタンス化されますshared_ptr<array_t> a。ここで、array_tは単純な配列に過ぎない構造体です (これがバグの実際の原因ではないと思います)。何か案は?
前もって感謝します。

PSタイプミスを修正するために回答が編集されました(13行目の ptr ではなく p )。

4

2 に答える 2

2

もちろん、is以外shared_ptr< T* >にキャストできないため、エラーが発生します。それを解決するために、キャスト演算子をクラスに追加できます。これにより、任意の型がキャストされますshared_ptr< void* >Tvoidshared_ptrshared_ptr< void* >

于 2013-05-13T06:24:00.203 に答える