0

私は問題に遭遇し、誰かが私を助けてくれるかどうか疑問に思っていました.

私のクラスの1つ(例:class1)には、

typedef boost::shared_ptr <class-one-object>

typedef std::vector<class-one-object>

別のクラス (class2 など) では、これを反復処理するために、このベクトルを再度作成する必要があります。

class-one-object

だから私は次のことを試していました

class1::ImportTableObject& table = configPtr->getTable();    
std::vector<class1::class-one-object>::const_iterator* iter = table.begin();

これにより、次のコンパイル エラーがスローされました。

cannot convret `__gnu_cxx::__normal_iterator<boost::shared_ptr<class1::class-one-object>*, std::vector<boost::shared_ptr<class1::class-one-object>,
 std::alloctor<boost::shared_ptr<class1::class-one-object> > > to '__gnu_cxx::__normal_iterator<const class1::class-one-object*, std::vector<class1::class-one-object>

などなど

誰でも私を助けてもらえますか?

前もって感謝します

4

2 に答える 2

5

beginイテレータへのポインタを返すのではなく、イテレータを返します。

std::vector<class1::class-one-object>::const_iterator iter = table.begin()

トリックを行う必要があります。

于 2012-05-08T07:50:26.290 に答える
1

エラー メッセージから、基本的にコンテナが混在していると結論付けることができます。1 つは 'class-one-object' への共有ポインタを含み、もう 1 つは 'class-one-object' を含みます。これはうまくいくはずです:

std::vector<boost::shared_ptr<class1::class-one-object> >::const_iterator iter = table.begin();

しかし、おそらく次のようなことを達成したいと思うでしょう:

std::vector<class1::class-one-object> vec;
const class1::class-one-object* ptr = (*iter).get();
if (ptr)
    vec.push_back(*ptr);

よろしくお願いします。

于 2012-05-08T13:26:10.793 に答える