2013-05-13 2 views
-1

C++에서 shared_ptr <>을 작성해야합니다. 그러나, 나는 지금 이상한 오류로 고투하고있다.
다음 코드 : 실제로 13 줄 (C2665를 : '2 과부하 중 어느 것도 모든 인수 형식을 변환 할 수 없었다 표준 : : 쌍 < _Ty1, _Ty2이> :: 쌍의'생성자에서 클래스 멤버를 전달할 때 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)); 
    } 
}; 

는 말을 컴파일 거부).
덧붙여 shared_ptr는 shared_ptr<array_t> a으로 main()에서 인스턴스화됩니다. array_t은 단순한 배열 이상으로 구성된 구조체입니다 (나는 이것이 버그의 실제 소스라고 생각하지 않습니다). 어떤 아이디어?
미리 감사드립니다.

P. 답은 오타 (13 행의 ptr 대신 p)를 수정하기 위해 편집되었습니다.

답변

2

void 인 경우를 제외하고는 을 shared_ptr< void* >으로 전송할 수 없으므로 오류가 발생합니다. 이를 해결하기 위해 shared_ptr 클래스에 캐스팅 연산자를 추가하면 모든 유형이 shared_ptr< void* >

으로 변환됩니다.
0

오류가있는 행은 선언되지 않은 p을 나타냅니다. ptr을 말하고 싶습니까?

관련 문제