2011-12-09 17 views
1

クラスを別のクラスに変換したい。私はほとんど常に私のために働くstatic_casを使用しようとしています、なぜそれは次のように動作しませんか?static_castクラスを別のクラスに追加しますか?

struct Mouse 
{ 
    Mouse() {} 
    // ....... 
}; 

struct Mice 
{ 
    Mice() {} 
    // ......... 
}; 

int main() 
{ 
    Mouse mouse; 
    Mice mice = static_cast<Mice>(mouse); 
} 
+4

「マウス」が複数の「マウス」であるという理由だけで、これらのクラスが関連しているわけではありません。マウスをマウスに変換できるコンバージョンはありません。本当に魔法になります。 – lapk

+0

基本的に 'static_cast'が何をしているのかを理解する必要があります。それがどのように動作するかの簡単な説明を参照してください(http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-and-reinterpret-cast-be-used)。 – Jon

答えて

0

mouseMiceのインスタンスではありませんが、それはおそらくすることができないだけでなくので。

struct SomeBase 
{ 
    //... 
}; 
struct SomeDerived : SomeBase 
{ 
    //... 
}; 
struct Unrelated 
{ 
    //... 
}; 

SomeBase * b; 
SomeDerived * d; 
Unrelated * r; 

//.... 

b = static_cast<SomeBase *>(d); //allowed, safe 
d = static_cast<SomeDerived *>(b); //allowed, unsafe 
r = static_cast<Unrelated *>(d); //not allowed, what is it even meant to do? 
+0

2番目のキャストは許可されません(また、最初のキャストはオブジェクトをスライスします)。 – UncleBens

+0

あなたは@UncleBensです。タイプではなく、問題のタイプへのポインタを考えていました。これは、あなたが少しのためにC++をコードしないと起こるものです。 –

+0

LOL。そして第三のものは、タイプミスのために許されていた。編集のおかげで@UncleBens –

2

マウスがマウスを受け入れるコンストラクタを持っている場合にのみ、マウスにマウスのインスタンスをキャストすることができ、またはマウスが(特に推奨されない後者)operator Miceを有しています。

関連する問題