我在wxWidgets項目中的主框架在按下按鈕時啓動線程。我嘗試從wxThread類的文檔中使用this example,但是編譯時出現錯誤。它說朋友班'沒有成員名爲''
||=== 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)) ===|
雖然我無法找到我做錯了什麼...... 這是我的主框架的代碼:
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;
}
該線程的標題:
class NavigationThread : public wxThread
{
public:
/** \name Constructor */
NavigationThread(wxFrame* parent, navigation_variables usedVariables);
/** \name Destructor */
virtual ~NavigationThread();
private:
virtual ExitCode Entry();
wxFrame* m_parent;
}
並且這發生錯誤的線程的析構函數:
NavigationThread::~NavigationThread()
{
wxCriticalSectionLocker enter(m_parent->m_navigationThreadCS);
m_parent->m_navigationThread = NULL;
//dtor
}
有誰知道我做錯了什麼?任何幫助表示讚賞。
'wxFrame'不包含這些成員,但'WindowsDgpsGUIFrame'。你可能會忘記'm_parent'的錯誤類型?它不應該是'WindowsDgpsGUIFrame * m_parent;'? – songyuanyao
'm_parent'是指向'wxFrame'實例的指針,它沒有任何想要的成員:派生類'WindowsDgpsGUIFrame'有它們。爲了訪問成員變量,你可以使用'dynamic_cast'將'm_parent'強制轉換爲其子類型,或者將m_parent'聲明爲'WindowsDgpsGUIFrame *' – wasthishelpful