Когда я пытаюсь скомпилировать приложение hello world из wxWidgets в MS Visual Studio 2017 Community Edition, я получаю большое количество ошибок.Я считаю, что ключевая ошибка - #error: "wchar_t must be available"
.Насколько я посмотрел, я нашел только одного человека с этой ошибкой, и когда они спросили, они не получили никаких полезных ответов.[http://www.cplusplus.com/forum/windows/197245/]
Что я могу сделать, чтобы эта программа успешно компилировалась, и как я могу гарантировать, что я не получу ту же ошибку в будущих (реальных) проектах?
Я простоначал изучать wxWidgets, и я установил версию 3.0.4 на свой ноутбук.Я скачал установщик, а затем использовал Visual Studio для компиляции библиотек в соответствии с инструкциями.Я считаю, что установка завершилась успешно, так как все примеры проектов скомпилированы и успешно запущеныоднако когда я попытался скомпилировать предоставленное приложение hello world в своем собственном проекте, я получил вышеупомянутые ошибки.Я убедился, что заголовки wxWidgets связаны, хотя, поскольку я новичок в использовании не встроенных библиотек, я, возможно, допустил ошибку.Я не уверен, почему примеры проектов будут работать, когда hello world не работает.
// wxWidgets "Hello World" Program
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
class MyFrame : public wxFrame
{
public:
MyFrame();
private:
void OnHello(wxCommandEvent& event);
void OnExit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
};
enum
{
ID_Hello = 1
};
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame();
frame->Show(true);
return true;
}
MyFrame::MyFrame()
: wxFrame(NULL, wxID_ANY, "Hello World")
{
wxMenu *menuFile = new wxMenu;
menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
"Help string shown in status bar for this menu item");
menuFile->AppendSeparator();
menuFile->Append(wxID_EXIT);
wxMenu *menuHelp = new wxMenu;
menuHelp->Append(wxID_ABOUT);
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append(menuFile, "&File");
menuBar->Append(menuHelp, "&Help");
SetMenuBar(menuBar);
CreateStatusBar();
SetStatusText("Welcome to wxWidgets!");
Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}
void MyFrame::OnExit(wxCommandEvent& event)
{
Close(true);
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
wxMessageBox("This is a wxWidgets Hello World example",
"About Hello World", wxOK | wxICON_INFORMATION);
}
void MyFrame::OnHello(wxCommandEvent& event)
{
wxLogMessage("Hello world from wxWidgets!");
}
Это точная копия кода, доступного по адресу https://docs.wxwidgets.org/trunk/overview_helloworld.html Я включил код здесь на случай, есликод на веб-сайте обновляется.
Как вы можете себе представить, я ожидал, что программа будет нормально компилироваться и работать, но вместо этого я получил большое количество ошибок, все из которых перечислены на этом рисунке: https://media.discordapp.net/attachments/452995181667418119/527236184326275113/unknown.png
Вот некоторые интересные наблюдения, которые я сделал:
Большинство ошибок проистекает из-за невозможности найти определение класса wxFrame
. Класс wxApp все еще определен, и я могу унаследовать от него класс myApp.
chartype.h
выдает ошибку, что wchar_t должен быть доступен, дажехотя согласно http://www.cplusplus.com/reference/cwchar/wchar_t/ он встроен в c ++, и мне не нужно включать какие-либо другие заголовки.
Ошибка в chartype.h
обнаружена в этомфрагмент кода:
/* Unicode support requires wchar_t */
#if !wxUSE_WCHAR_T
#error "wchar_t must be available"
#endif /* Unicode */
- Насколько я могу судить, #define фактически никогда не устанавливается ни в каких исходных файлах, которые я могу найти, но он показывает, существует ли тип wchar_t.Я добавил небольшую переменную в свой код этого типа, и она была создана отлично
Любая помощь приветствуется.