我试图理解为什么使用指针从基类到派生类的转换编译得很好,但使用非指针对象进行转换会产生错误 C2440。
下面我有一个基类ThreadedMessage
这是由类继承的GPSMessage
.
struct ThreadedMessage
{
ThreadedMessage()
: m_Type(0), m_ID(0)
{ }
ThreadedMessage(uint Type, uint ID = 0) :
m_Type(Type), m_ID(ID)
{ }
uint m_Type;
uint m_ID;
};
struct GPSMessage : public ThreadedMessage
{
GPSMessage()
: ThreadedMessage()
{ }
GPSMessage(double lat, double lon)
: ThreadedMessage(1), m_lat(lat), m_lon(lon)
{ }
double m_lat;
double m_lon;
};
In myFunction
我正在尝试从基类转换为派生类。
void myFunction(const ThreadedMessage& msg)
{
const GPSMessage* message = static_cast<const GPSMessage*>(&msg); // Compiles fine
const GPSMessage message1 = static_cast<const GPSMessage>(msg); // Error C2440
}
致电给myFunction()
看起来像这样:
GPSMessage msg(21.123, 12.321);
myFunction(msg);
当我编译时,指针的转换编译正常,但非指针转换失败并出现以下错误:
错误 C2440:“static_cast”:无法从“const ThreadedMessage”转换为“const GPSMessage”没有构造函数可以采用源类型,或者构造函数重载解析不明确
为什么我无法使用非指针变量从基类转换为派生类?
编译器是MS VS 2008 C++。
是的,我看过其他类似的问题,但我读过的问题似乎没有回答我的问题。