2012-04-03 11 views
1

私はC++ポインタとオブジェクトのハングアップを、単純なVehicle Routing Problemを実装している小規模なプロジェクトを通じて取得しようとしています。コードは現在動作していますが、私のアプローチが完全に間違っていると感じることはできません。以下のようなコードのスニペット何のバグ私を、以下のとおりです。C++のオブジェクトへのポインタ

std::map<const Route*, double>::iterator it = quantities.begin(); 
if ((*(*(it->first)).getDestination()).getDemand() > (*(*(it->first)).getDeparture()).getSupply()) 

かの条件でのポインタの地獄のような状況は、すでにオブジェクトを作成するためのポインタを返すgetメソッドの結果です。私は、ここでのオフトラック完全

const Departure* Route::getDeparture() const { 
    return departure; 
}; 

const Destination* Route::getDestination() const { 
    return destination; 
}; 

int Destination::getDemand() const { 
    return demand; 
}; 

int Departure::getSupply() const { 
    return supply; 
}; 

アム私は何かが足りないのですかsitutation何かのこのタイプは正常です:呼び出されている方法はありますか?

答えて

2

0:

const Departure& Route::getDeparture() const { 
    return *departure; 
}; 

とは.、ない->を使用します。const参照によって返す方が良いです

if(it->first->getDestination().getDemand() > it->first->getDeparture().getSupply()) 
2

(*p).xの代わりにp->xの代わりに。

また
if(it->first->getDestination()->getDemand() > it->first->getDeparture()->getSupply()) 

あなたは、そのオブジェクトの所有権を放棄するつもりはありません(とあなたがこのケースでは、ありません)場合:あなたは->* Sを変更することができ、可読性を高めるために

+0

とiterator-> member-> method1-> method2などのチェーンだけのチェーン? –

+0

はい。そのとおり –

関連する問題