包括警卫不工作

时间:2011-07-25 02:10:29

标签: c++ wxwidgets

我在trackerFrame.h文件中有如下内容。

它包含在trackerFrame.cpp和main.cpp中,无论出于什么原因,当我尝试编译与wxWidgets事件表宏有关的所有内容时,我会从中获得多个定义问题。

#ifndef TRACKER_H
#define TRACKER_H

#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#  include "wx/wx.h"
#endif


#include <wx/frame.h>
#include <wx/string.h>
#include <wx/menu.h>
#include <iostream>

class mainFrame : public wxFrame {
public:
    mainFrame(wxString title);
    DECLARE_EVENT_TABLE()
private:
    void closeProgram(wxCommandEvent & event);
};


BEGIN_EVENT_TABLE(mainFrame, wxFrame)
    EVT_MENU(wxID_EXIT, mainFrame::closeProgram)
END_EVENT_TABLE()

#endif

我99.9%肯定我正在做包含警卫,我只是无法弄清楚发生了什么。

1 个答案:

答案 0 :(得分:4)

你的包含警卫是正确的。问题最有可能出现在这里:

BEGIN_EVENT_TABLE(mainFrame, wxFrame)    
    EVT_MENU(wxID_EXIT, mainFrame::closeProgram)
END_EVENT_TABLE()

According to the wxWidgets wiki on event tables,需要将事件表定义到.cpp文件中。因此,您将拥有一个包含tracker.cpp文件的tracker.h文件,并将BEGIN_EVENT_TABLE(mainFrame, wxFrame) ...地图放入tracker.cpp文件中。