std::shared_ptr<void>
에서 템플릿 std::shared_ptr<T>
으로 "복사"하려고 할 때 실행됩니다. 그것은 다음과 같습니다std :: shared_ptr 초기화 <T> std :: shared_ptr <void>
c:\...path_here...\tdynamic.hpp(426): error C2440: 'type cast': cannot convert from 'const std::shared_ptr<void>' to 'std::shared_ptr<T>'
1> with
1> [
1> T=grim::Actor
1> ]
1> c:\...path_here...\tdynamic.hpp(426): note: No constructor could take the source type, or constructor overload resolution was ambiguous
컴파일러 & IDE :
template < >
class TDynamic<void>
{
protected:
std::shared_ptr<void> m_pointer;
public:
// Here i got constructors, functions etc
template < typename U >
TDynamic<U> SwitchType()
{
TDynamic<U> returnValue;
returnValue.m_pointer = std::shared_ptr<U>(m_pointer); // error here
}
};
오류가이 말한다 비주얼 스튜디오 2015 커뮤니티
이이 상황에 대해 나에게 필요하다. I 클래스 "배우"와 파생 클래스 "APlayer"가 말할 수
class Actor
{
public:
};
class APlayer
: public Actor
{
public:
};
int main()
{ // some code here
TDynamic<APlayer> test1(new APlayer);
TDynamic<void> test2(test1);
TDynamic<Actor> test3(test2); // error here
}
나는 여기에 전체 코드를 붙여 넣습니다 수 있지만 같은 550 개 라인과 그것의 대부분은 문제가되지 않습니다. 그저 std::shared_ptr
만 복사하면됩니다.
['static_pointer_cast'] (http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast)를 확인하십시오. 그러나 실제로이 작업을 수행 할 때는주의해야합니다. – krzaq
_ "여기에 전체 코드를 붙여 넣을 수는 있지만 550 줄과 그 대부분은 중요하지 않습니다."[MCVE]를 만드는 방법에 대해 읽어보십시오. –