2011-12-09 37 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

因为这不仅是mouse不是Mice一个实例,但它不可能是。

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

第二次转换也是不允许的(并且第一次强制转换对象)。 – UncleBens

+0

正确的你是@UncleBens我正在考虑指向问题类型而不是类型的指针。这就是当你不编写C++代码时会发生什么:) –

+0

LOL。第三个是因为输入错误而被允许的。感谢编辑,@UncleBens –

2

只能铸造鼠标的一个实例为小鼠如果小鼠有一个构造接受鼠标,或鼠标具有operator Mice(后者没有特别推荐)。