我在转换参数时遇到了一些问题:
我有这个结构:
class XMLCO
{...};
class CO: public XMLCO
{...};
我的问题在于构造函数中的这个类:
class ProcessUnit
{
public:
ProcessUnit( const CO& co );
private:
NetComm _ipComm;
};
对象_ipComm(类型为NetComm)需要使用XMLCO进行初始化,但是在这个构造函数中我只给了一个继承XMLCO的CO,所以我虽然可以在构造函数中做某种类似的向下转换:
ProcessUnit::ProcessUnit( const CO& co )
{
CO temp = const_cast<CO>( co ); // to remove the const -- THIS LINE CAUSE THE PROBLEM (it gives me this error: the type in a const_cast must be a pointer or reference to an object type
CO* ptrTemp = &temp; // to make it a pointer
XMLCO* xmlcc = dynamic_cast<IOXMLDescCreationContext*>( ptrTemp );
_ipComm = new IONetworkComm( *xmlcc );
}
我想知道的是,是否有更简单的方法(不改变通用结构的任何内容)或者我做错了什么。
由于
答案 0 :(得分:4)
对象_ipComm(类型为NetComm)需要使用XMLCO进行初始化,但是在这个构造函数中我只给了一个继承XMLCO的CO,所以我虽然可以做某种向下转换
在您的情况下,您无法向上,只能向上。幸运的是,这个演员是隐含的。因此,没有什么可以留给你做的。你可以指定:
CO temp = co;
但请注意,此复制对象。这真的是你想要的吗?此外,删除const
可能不仅是不必要的,而且是错误的。即使您更正了代码中的语法,这仍然无效。要正确诊断,您需要发布其他定义。
答案 1 :(得分:0)
不要使用const_cast
,因为这里没有必要 - 看起来你的问题与参数的常量无关,因为_ipComm
可能是用初始化的副本 co
。
问题可能是IONetworkComm
的构造函数接受了非const对象。如果是这种情况并且这不是一个错误,那么它会告诉你一些关于IONetworkComm
的设计 - 即它需要从非const对象初始化。也许你应该在ProcessUnit
类的构造函数中反映出来?也许它应该是:
ProcessUnit( CO& co );