2016-12-16 18 views
0

Я пытаюсь скомпилировать следующий код, используя WxWidgets 3.0 библиотеки:WxWidgets осуждается конструктор

foo.h

#ifdef __GNUC__ 
    #include <wx/version.h> 

    #if wxMAJOR_VERSION >= 3 
    #pragma GCC diagnostic push 
    #pragma GCC diagnostic ignored "-Wdeprecated-declarations" //< I'm trying to disable warning 
    #endif // wxMAJOR_VERSION >= 3 

#endif // __GNUC__ 

#ifdef HAVE_VARIADIC_MACROS 
    #undef HAVE_VARIADIC_MACROS //< this macro redefines in wx.h 
#endif // HAVE_VARIADIC_MACROS 

#include <wx/wx.h> //< deprecated constructor defined here 

#ifdef __GNUC__ 
    #pragma GCC diagnostic pop 
#endif // __GNUC__ 

foo.cpp

#include "foo.h" 
.... 
some_menu = new wxMenuItem(...); //< deprecated constructor 

Конструктор определенные в файле wx/menuitem.h co де:

#if WXWIN_COMPATIBILITY_2_8 //< defined 
    // compatibility only, don't use in new code 
    wxDEPRECATED_CONSTRUCTOR(
    wxMenuItem(wxMenu *parentMenu, 
       int id, 
       const wxString& text, 
       const wxString& help, 
       bool isCheckable, 
       wxMenu *subMenu = NULL) 
    ); 
#endif 

Компиляция с GCC 5.4.0, Ubuntu 16.04 x86_64:

g++ -o foo.os -c -I/usr/lib/x86_64-linux-gnu/wx/include/gtk2-unicode-3.0 -I/usr/include/wx-3.0 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -g3 -Wall -Werror 
... 
foo.cpp:83:109: error: 'wxMenuItem::wxMenuItem(...)' is deprecated [-Werror=deprecated-declarations] 

Как я могу это исправить?

ответ

0

Очевидным и лучшим решением является прекращение использования устаревшего ctor, это довольно просто сделать, так почему бы и нет?

В противном случае, я думаю (но я не проверял), что вы могли бы также заставить его работать с #pragma с, но вы должны были бы поставить их вокруг вашего кода с помощью этого CTOR, потому что это где предупреждение создается не вокруг объявления.

Наконец, для полноты вы также можете удалить -Werror и жить с предупреждением, но это, конечно, не самый лучший выбор.

 Смежные вопросы

  • Нет связанных вопросов^_^