Mein Hauptrahmen in einem WxWidgets-Projekt startet einen Thread, wenn eine Schaltfläche gedrückt wird. Ich habe versucht, this example aus der Dokumentation der WxThread-Klasse zu verwenden, aber ich bekomme einen Fehler beim Kompilieren. Es sagtFriend-Klasse 'hat kein Mitglied mit Namen ...'
||=== Build: Debug in WindowsDgpsGUI (compiler: GNU GCC Compiler) ===|
D:\WindowsDgpsGui\NavigationThread.cpp||In destructor 'virtual NavigationThread::~NavigationThread()':|
D:\WindowsDgpsGui\NavigationThread.cpp|82|error: 'class wxFrame' has no member named 'm_navigationThreadCS'|
D:\WindowsDgpsGui\NavigationThread.cpp|84|error: 'class wxFrame' has no member named 'm_navigationThread'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
Obwohl ich nicht finden, was ich falsch gemacht habe ... Dies ist der Code meines Hauptrahmen:
class WindowsDgpsGUIFrame: public wxFrame
{
public:
WindowsDgpsGUIFrame(wxWindow* parent,wxWindowID id = -1);
virtual ~WindowsDgpsGUIFrame();
protected:
wxCriticalSection m_navigationThreadCS; //protects the m_navigationThread pointer
NavigationThread* m_navigationThread;
friend class NavigationThread;
}
Dies ist der Header des Themas:
class NavigationThread : public wxThread
{
public:
/** \name Constructor */
NavigationThread(wxFrame* parent, navigation_variables usedVariables);
/** \name Destructor */
virtual ~NavigationThread();
private:
virtual ExitCode Entry();
wxFrame* m_parent;
}
und dies der Destruktor des Fadens, wo der Fehler auftritt:
NavigationThread::~NavigationThread()
{
wxCriticalSectionLocker enter(m_parent->m_navigationThreadCS);
m_parent->m_navigationThread = NULL;
//dtor
}
Weiß jemand, was ich falsch gemacht habe? Jede Hilfe wird geschätzt.
'wxFrame' enthält keine solchen Member, aber' WindowsDgpsGUIFrame' tut. Sie könnten den falschen Typ für 'm_parent' delcare? Sollte es nicht 'WindowsDgpsGUIFrame * m_parent;' sein? – songyuanyao
'm_parent' ist ein Zeiger auf eine' wxFrame'-Instanz, die keines der gesuchten Mitglieder hat: die abgeleitete Klasse 'WindowsDgpsGUIFrame' hat sie. Um auf die Member-Variablen zugreifen zu können, können Sie 'm_parent' mit' dynamic_cast' in seinen Untertyp umwandeln, oder 'm_parent' als' WindowsDgpsGUIFrame * ' – wasthishelpful