私は宣言する:
typedef std::tr1::shared_ptr<ClassA> SharedPtr;
その後:
std::vector<SharedPtr> mList;
と:
typedef std::vector<SharedPtr>::iterator ListIterator;
の戻り値mList.size()
は0ですが、イテレータを使用すると、空のベクトルを反復処理します。これが私がイテレータを使用する方法です:
for(ListIterator it = mList.begin(); it!=mList.end(); it++)
(*it)->someMethod();
「」を実行してsomeMethod()
から、セグメンテーション違反をスローします。イテレータは空のベクトルでどのように反復していますか????
詳しくは
私はGTKを使用しているので、これがメインオブジェクトを渡す方法です。
g_signal_connect(G_OBJECT(widget), "event", G_CALLBACK(&ClassB::fun), this)
これthis
はClassB自体です。
そして、私はそれを次のように受け取ります:
gboolean ClassB::fun(GtkWidget *widget, GdkEvent *event, ClassB *data)
{
// The mList is here, and is accessed like this:
// data->mList
}
mList
私が引用したように宣言されています。他の属性にアクセスすると、それdata->xxx
が機能し、問題がない場合、問題はでのみ発生しmList
、この属性は動的に割り当てられません。
*data
とのメモリアドレスを確認しましたthis
が、同じアドレスです。