2011-08-12 3 views
0

Я определяю wxObjArray в моем TMainFrame.h следующим образом:Как правильно включить 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__ 

Теперь я хочу использовать класс 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?

+0

Какая ошибка компилятора? Вы читали dynarray.h о том, как использовать WX_DECLARE_OBJARRAY - вы не упомянули arrimpl.cpp? – tinman

+0

Я обновил свой пост. Я включаю arrimpl.cpp в свои исходные файлы (TMainFrame.cpp и TRunThread.cpp). – ComFreek

ответ

1

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

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


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

+0

В исходном файле, правильно? Я уже поставил эти две строки в TRunThread.cpp (см. Мой пост). Я также думаю, что std :: vector немного проще, чем wxObjArray. – ComFreek

+0

Если я помещаю WX_DECLARE_OBJARRAY в оба файла заголовка, я получаю ошибку «переопределения». Код скомпилирован правильно, пока я не создал TRunThread.cpp/h, который также нуждается в этом массиве! – ComFreek

+0

В ссылке упоминается, что '' должен быть включен ** перед ** макросом define. – UncleBens

 Смежные вопросы

  • Нет связанных вопросов^_^