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

하지 만 Micemouse하지 인스턴스이지만 가능하지 않을 수 있기 때문이다.

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 있습니다.

관련 문제