2011-08-12 26 views
0

次のように私は私のTMainFrame.hでwxObjArrayを定義します。wxObjArrayを正しくインクルードするにはどうすればよいですか?

#ifndef __TMainFrame__ 
#define __TMainFrame__ 

#include "MyApp_gui.h" 
//// end generated include 

#include "TRunThread.h" 

#include <wx/dynarray.h> 

class TMove; 

WX_DECLARE_OBJARRAY(TMove, TMoveArray); 

/* ...Class TMainFrame... */ 
/* ...Class TMove... */ 

#endif // __TMainFrame__ 

を今、私は私のTRunThread.hでWX_DECLARE_OBJARRAYによって作成されたクラスTMoveArrayを使用します。 しかし、そのクラスが見つからない

#include <wx/arrimpl.cpp> // this is a magic incantation which must be done! 
WX_DEFINE_OBJARRAY(TMoveArray); 
#include "TRunThread.h" 

/* ...Code... */ 

私もWX_DEFINE_OBJARRAYディレクティブで試してみた:

#ifndef TRUNTHREAD_H_INCLUDED 
#define TRUNTHREAD_H_INCLUDED 

#include <wx/wx.h> 
#include "TMainFrame.h" 

// doesn't work: WX_DECLARE_OBJARRAY(TMove, TMoveArray); 

class TRunThread : public wxThread 
{ 
    public: 
    wxThreadError Create(TMoveArray moves); 
}; 

#endif // TRUNTHREAD_H_INCLUDED 

ソースファイルTRunThread.cpp(GCC 'TMoveArrayは'を宣言されていません)。

質問: wxObjArrayを正しくインクルードするにはどうすればよいですか?

+0

正確なコンパイラエラーは何ですか? dynarray.hを読んだことがありますか?WX_DECLARE_OBJARRAYの使い方について - あなたはarrimpl.cppについて言及していませんか? – tinman

+0

投稿を更新しました。私はソースファイル(TMainFrame.cppとTRunThread.cpp)にarrimpl.cppを含めます。 – ComFreek

答えて

1

WX_DECLARE_OBJARRAYWX_DEFINE_OBJARRAYの両方が必要です。後者は実装ファイルに行きます。

referenceには完全な使用例やコメントがあります。


また、std::vectorを使用することもできます。

+0

ソースファイルでは、右ですか?私はすでに2つの行をTRunThread.cppに入れました(私の記事をもう一度見てください)。 私もstd :: vectorはwxObjArrayよりも少しシンプルだと思います。 – ComFreek

+0

WX_DECLARE_OBJARRAYを両方のヘッダーファイルに入れた場合、「再定義」エラーが発生します。 TRunThread.cpp/hを作成してその配列も必要になるまで、コードは正しくコンパイルされました! – ComFreek

+0

リファレンスには、定義マクロの前に ''を含める必要があることが書かれています。 – UncleBens

関連する問題