1

我在转换参数时遇到了一些问题:

我有这个结构:

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 );
}

我想知道的是,是否有更简单的方法(不改变任何通用结构)或者我做错了什么。

谢谢

4

2 回答 2

4

需要使用 XMLCO 初始化对象 _ipComm(NetComm 类型),但是在这个构造函数中,我只得到了一个继承 XMLCO 的 CO,所以我虽然可以做一些向下转换

在你的情况下,你不能放下,只能向上。幸运的是,这个演员表是隐式的。因此,您无事可做。您可以分配:

CO temp = co;

但是请注意,这会复制对象。这真的是你想要的吗?此外,删除const可能不仅没有必要,而且是错误的。即使您更正了代码中的语法,这仍然行不通。要正确诊断此问题,您需要发布其他定义。

于 2012-05-14T13:26:58.760 回答
0

不要使用 a const_cast,因为这里没有必要 - 看起来您的问题与参数的常量性无关,因为可能_ipComm会通过. co

问题可能是构造函数IONetworkComm采用非常量对象。如果是这种情况并且这不是一个错误,那么它会告诉您有关设计的一些信息IONetworkComm- 即它需要从非常量对象初始化。也许您应该在ProcessUnit类的构造函数中反映这一点?也许应该是:

ProcessUnit( CO& co ); 
于 2012-05-14T13:16:51.960 回答