0

データベース機能に使用する RogueWave というサードパーティ ライブラリをアップグレードしました。

しかし、私は本当にばかげたコンパイルエラーが発生しており、それが何について不平を言っているのかよくわかりません:

 typedef std::set< EVBusCalOverride > OverrideSet;
 OverrideSet overrides;

 OverrideSet::iterator itor = this->overrides.begin( );
 while( itor != this->overrides.end( ) )

イテレータの初期化行でエラーが発生します

An object or reference of type "std::set<EVBusCalOverride,std::less<EVBusCalOverride>,std::allocator<EVBusCalOverride> >::iterator" 
cannot be initialized with an rvalue of type    "std::_Tree<std::_Tset_traits<EVBusCalOverride,std::less<EVBusCalOverride>,std::allocator<EVBusCalOverride>,0> >::const_iterator".

EVBusCalOverride は単なるクラスです

class EVBusCalOverride
{

   private:
   RWDate overrideDate;
   bool   businessDay;
};

RWDate は、RogueWave ライブラリに属する​​ datetype 変数です。

それがイテレータの初期化にどのように影響するかわかりません。誰かがこれを引き起こしている可能性のある正しい方向に私を向けることができますか?

4

3 に答える 3

5

roguewave は非常に古いライブラリです。

ほとんどのコレクションにはiterator、メンバーを変更できるイテレータとできないイテレータの 2 種類がありますconst_iterator

std::setすべての反復子が const であるため、メンバーを変更できないという意味で、その規則の例外です。ただし、それらはまだサポートiteratorしておりconst_iterator、多くの場合、一方が他方のエイリアスですが、roguewave は明らかにサポートしていません。

iteratorコードを に変更するconst_iteratorとおそらく修正されますが、可能であれば STL のバージョンを変更することをお勧めします。

于 2012-10-24T16:52:09.827 に答える
1

オーバーライドは const のようです。このコードは const メソッドの一部ですか? その場合、次のようにイテレータを初期化する必要があります。

OverrideSet::const_iterator itor = this->overrides.begin( ); 
于 2012-10-24T16:50:52.387 に答える
1

エラーメッセージには次のように記載されています。

... ::const_iterator

constこれはメソッドで呼び出されていると思います。

于 2012-10-24T16:51:27.617 に答える