2013-04-23 1 views
0
나는 (내가 쓰고 있어요 것에 대해 저장) 변경할 수 없습니다 코드베이스의 기능을하고 있어요

거기에 일부 유형의 현재 위치 : 이제만들기 (consts 및 부스트) 가변 불변의 유형

// Pointer to a mutable thingy 
typedef boost::shared_ptr<Thingy>  MPtr; 

// Pointer to an immutable thingy 
typedef boost::shared_ptr<const Thingy> Ptr; 

, 나는 Ptr 타입의 객체에 할당 할 필요가있는 MPtr 타입의 객체를 가지고있다.하지만 컴파일러는 변환이 불가능하다는 것을 알 수 없다. 에 const_cast를 사용하거나 도움하지 않는 것 :

MPtr foo = const_cast<MPtr*>(moo); 

나는 그것이 기본 유형을 변경할 수 없다는 오류가 발생합니다. 이 문제를 해결할 수있는 방법에 대한 아이디어가 있습니까?

+0

어떻게 해키를 기꺼이 받으시겠습니까? 당신이 음매의 주소를 취한 다음 C 스타일의 캐스트를 사용하고, 당신이 선해야한다고 역설하십시오. MPtr foo = (Mptr) &moo; – RandyGaul

+0

'Thingy'는'typedef' 또는'#define '입니까? 'Thingy'는 두 위치 모두에서 동일한 문자열입니까? 오류 C2440 : – Yakk

답변

1
MPtr foo = boost::const_pointer_cast<Thingy>(moo); 
+0

안녕, 내 말은 오류가 발생하지만, 귀하의 제안에 감사드립니다 '초기화':에서 변환 할 수 없습니다 '부스트 : : shared_ptr의 를'에 '부스트 : : shared_ptr의 ' – easythrees

+0

을 user1115716 @ 모두 T입니까 같은 유형입니까? 오류뿐 아니라 컴파일러 출력은 무엇입니까? – RandyGaul

+0

저는이 문제를 해결하기 위해 const가 아닌 버전을 만들고 const 버전의 작업을 섀도 잉하도록했습니다. – easythrees