std::shared_ptr<void>
からテンプレートstd::shared_ptr<T>
に「コピー」しようとすると実行されます。それは次のようになります。std :: shared_ptrを<T>からstd :: shared_ptrに初期化します。<void>
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
}
};
エラーは、この氏は述べています:
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:Visual Studioの2015コミュニティ
これは、このような状況のために私には必要です。私は全体のここでのコードが、その550のような行を貼り付けることができ、それのほとんどは問題ではありません、私はクラスの「アクター」と派生クラス「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
}
を考えてみましょう。私はちょうどそのstd::shared_ptr
をコピーする必要があります。
['static_pointer_cast'](http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast)をチェックしてください。ただし、実際にこれを行うには注意が必要です。 – krzaq
_ "ここにコード全体を貼り付けることはできますが、その550行は大したものではありません" _ [MCVE]を構築する方法を読む。 –