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

オブジェクト_ipComm(タイプNetComm)はXMLCOで初期化する必要がありますが、このコンストラクターではXMLCOを継承するCOしか与えられていないので、ある種のダウンキャストを行うことはできますが

あなたの場合、あなたはキャストダウンすることはできず、アップするだけです。幸いなことに、このキャストは暗黙的です。したがって、あなたがすることは何も残っていません。あなたはただ割り当てることができます:

CO temp = co;

ただし、これによりオブジェクトがコピーされることに注意してください。これは本当にあなたが望むものですか?さらに、削除constはおそらく不要であるだけでなく、間違っています。コードの構文を修正しても、これは機能しません。ただし、これを適切に診断するには、他の定義を投稿する必要があります。

于 2012-05-14T13:26:58.760 に答える
0

ここでは必要ないので、を使用しないでください-おそらく、のコピーで初期化されるconst_castように、問題はパラメータの定数に関係していないようです。_ipComm co

問題は、のコンストラクタがIONetworkComm非constオブジェクトを受け取ることである可能性があります。それが事実であり、それが間違いではない場合、それはの設計について何かを教えてくれますIONetworkComm-つまり、非定数オブジェクトから初期化する必要があるということです。たぶん、それをProcessUnitクラスのコンストラクターに反映する必要がありますか?多分それはあるべきです:

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