Как правильно включить wxObjArray? - PullRequest
0 голосов
/ 12 августа 2011

Я определяю wxObjArray в моем TMainFrame.h следующим образом:

#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__

Теперь я хочу использовать класс TMoveArray, созданный WX_DECLARE_OBJARRAY в моем TRunThread.h. Но этот класс не может быть найден (GCC: 'TMoveArray' не был объявлен )

#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:

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

/* ...Code... */

Я также пытался с директивой WX_DEFINE_OBJARRAY.

Вопрос: Как правильно включить массив wxObjArray?

1 Ответ

1 голос
/ 12 августа 2011

Вам понадобятся и WX_DECLARE_OBJARRAY, и WX_DEFINE_OBJARRAY.Последний идет в файл реализации.

Ссылка содержит полный пример использования и дополнительные комментарии.


И вы также можете просто использовать std::vector.

...