wxListの使いかた
// Listの中にぶち込みたいデータ型を定義する // データ型を書いたヘッダファイル(.h)を別に作成して定義したほうが良い class HogeData { public : wxString name; int number; }; /** 宣言 */ // HogeDataを格納できるHogeDataListを宣言する // この宣言はListを使うクラスのヘッダファイルなどですると良いと思う class HogeData; WX_DECLARE_LIST(HogeData, HogeDataList); ・ ・ ・ /** 実装 */ // Listを実装するソースファイル(.cpp)にこれを書く // これで実装部分でリストを使うことが許されるんやな #include <wx/listimpl.cpp> WX_DEFINE_LIST(HogeDataList); void HogeFrame::SetHogeList() { // リストを生成 HogeDataList* kochikame = new HogeDataList(); /** なんかいろいろ処理 */ delete kochikame; }
と、まあこんな感じで実装するのだが、このままだとエラー出ます。具体的には wxWidgets-**/src/common/list.cppの警告が出る、主にこの辺から
wxNodeBase *wxListBase::Append (const wxString& key, void *object) { wxCHECK_MSG( (m_keyType == wxKEY_STRING) || (m_keyType == wxKEY_NONE && m_count == 0), NULL, wxT("can't append object with string key to this list") ); wxNodeBase *node = CreateNode(m_nodeLast, NULL, object, key); return AppendCommon(node); } wxNodeBase *wxListBase::Insert(wxNodeBase *position, void *object) { // all objects in a keyed list should have a key wxCHECK_MSG( m_keyType == wxKEY_NONE, NULL, wxT("need a key for the object to insert") ); wxCHECK_MSG( !position || position->m_list == this, NULL, wxT("can't insert before a node from another list") );
なんでかって言うとwxListを単純に宣言するとなぜかkey付きのListが生成されるから。これはwxWidgets開発者の老婆心なのかおせっかいなのか。というかkey付きリストとかいらねえ。
だから以下のように宣言を変える。キー無しでリストを作る。
void HogeFrame::SetHogeList() { // リストを生成 HogeDataList* kochikame = new HogeDataList(wxKEY_NONE); /** なんかいろいろ処理 */ delete kochikame; }
参考:wxWidgets Discussion Forum • View topic - How to define a keyed wxList?