【发布时间】:2011-07-25 02:10:29
【问题描述】:
我的 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% 确信我正确地执行了包含防护,但我就是不知道发生了什么。
【问题讨论】:
-
包括每个编译单元的守卫工作,而不是每个程序。
-
当您提到“多重定义问题”或任何编译器/链接器错误时,您应该将错误消息逐字复制并粘贴到您的问题中,以供将来参考。
-
包含守卫不能防止程序范围内的多重定义问题。包含守卫从来没有打算用来保护程序范围内的多重定义问题。目前尚不清楚是什么让您得出结论认为您的包含警卫“不起作用”。他们工作得很好。他们只是做他们应该做的事(而不做他们不应该做的事)。