include\editorbase.h:36:22: warning: 'virtual void EditorBase::operator=(const EditorBase&)' was hidden [-Woverloaded-virtual]
include\cbeditor.h:70:22: warning: by 'virtual void cbEditor::operator=(const cbEditor&)' [-Woverloaded-virtual]
I see a lot of such warnings, can we remove them?
Thanks.
MinGW GCC 4.6.3.
class DerivedClass : public BaseClass
{
using BaseClass::hiddenFunction;
// other stuff.
};
should remove the warnings.
but I agree that
DerivedClass::operator =(const BaseClass&)
is strange
p.s. I suppose the best we could do is to make operator= an unimplemented private function.
Turns out that the script bindings are using the operator=, but the versions in EditorBase and cbEditor both throw an exception,
so the second best thing is to remove the virtual keyword in their declarations.
EditorBase:
virtual void operator=(const EditorBase& /*rhs*/){ cbThrow(_T("Can't assign an EditorBase* !!!")); }
cbEditor:
virtual void operator=(const cbEditor& /*rhs*/){ cbThrow(_T("Can't assign an cbEditor* !!!")); }
No inheritance is used here...
Ok, remove the "virtual" keyword, then there is not such warning now.
I see another kind of warning:
include\cbplugin.h:169:22: warning: 'virtual bool cbPlugin::BuildToolBar(wxToolBar*, int&)' was hidden [-Woverloaded-virtual]
include\cbplugin.h:408:22: warning: by 'virtual bool cbDebuggerPlugin::BuildToolBar(wxToolBar*)' [-Woverloaded-virtual]
Here:in cbPlugin:
virtual bool BuildToolBar(wxToolBar* toolBar) = 0;
virtual bool BuildToolBar(wxToolBar* toolBar, int &priority) { priority = 50; return BuildToolBar(toolBar); }
and in derived class:
virtual bool BuildToolBar(wxToolBar* toolBar);
virtual int getPriority() const { return 50; }
or
virtual void changePriority(int& priority) { priority = 50; }
and then
bool BuildToolBarAndSetPriority(wxToolBar* toolBar, int &priority)
{
changePriority(priority);
return BuildToolBar(toolBar);
}
should be cleaner, I think.
Some days later, I rethink it. Now. follow jarod42's advice
The code
ToolbarInfo MainFrame::DoAddPluginToolbar(cbPlugin* plugin)
{
ToolbarInfo info;
info.toolbar = Manager::Get()->CreateEmptyToolbar();
info.priority = 50;
if (plugin->BuildToolBar(info.toolbar, info.priority))
{
SetToolBar(0);
InitToolbar(info.toolbar);
becomes like below:
In base class, add a function:
virtual int GetToolBarPriority() { return 50; }
If some derived plugin class need to implement some other priority values, they should override their own.
ToolbarInfo MainFrame::DoAddPluginToolbar(cbPlugin* plugin)
{
ToolbarInfo info;
info.toolbar = Manager::Get()->CreateEmptyToolbar();
//info.priority = 50;
if (plugin->BuildToolbar(info.toolbar))
{
info.priority = plugin->GetToolBarPriority();
SetToolBar(0);
InitToolbar(info.toolbar);
Is it right?
There are still some warnings like:
[ 35.4%] g++.exe -Wall -g -pipe -mthreads -fmessage-length=0 -fexceptions -Winvalid-pch -DHAVE_W32API_H -D__WXMSW__ -DWXUSINGDLL -DcbDEBUG -DCB_PRECOMP -DWX_PRECOMP -DwxUSE_UNICODE -Woverloaded-virtual -DEXPORT_LIB -DEXPORT_EVENTS -DWXMAKINGDLL_PROPGRID -DwxPG_USE_WXMODULE=0 -DWXMAKINGDLL_SCI -iquote.objs\include -I.objs\include -I. -IE:\code\cb\wx\wxWidgets-2.8.12\include -IE:\code\cb\wx\wxWidgets-2.8.12\contrib\include -IE:\code\cb\wx\wxWidgets-2.8.12\lib\gcc_dll\mswu -Isdk\wxscintilla\include -Isdk\wxpropgrid\include -Iinclude\tinyxml -Iinclude -Iinclude\tinyxml -Iinclude\scripting\bindings -Iinclude\scripting\include -Iinclude\scripting\sqplus -Iinclude\mozilla_chardet -Isdk\wxpropgrid\include -c sdk\scripting\bindings\sc_progress.cpp -o .objs\sdk\scripting\bindings\sc_progress.o
E:\code\cb\wx\wxWidgets-2.8.12\include/wx/generic/progdlgg.h:55:17: warning: 'virtual bool wxProgressDialog::Update(int, const wxString&, bool*)' was hidden [-Woverloaded-virtual]
sdk\scripting\bindings\sc_progress.cpp:42:14: warning: by 'bool ProgressDialog::Update(int, const wxString&)' [-Woverloaded-virtual]
E:\code\cb\wx\wxWidgets-2.8.12\include/wx/generic/progdlgg.h:62:18: warning: 'virtual void wxProgressDialog::Update()' was hidden [-Woverloaded-virtual]
sdk\scripting\bindings\sc_progress.cpp:42:14: warning: by 'bool ProgressDialog::Update(int, const wxString&)' [-Woverloaded-virtual]
class ProgressDialog : public wxProgressDialog
{
public:
ProgressDialog()
: wxProgressDialog(_("Progress"),
_("Please wait while operation is in progress..."),
100, 0,
wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_CAN_ABORT)
{
}
~ProgressDialog()
{
}
ProgressDialog& operator=(const ProgressDialog&)
{
cbThrow(_T("ProgressDialog copy constructor should never be called!"));
}
bool Update(int value, const wxString& newmsg)
{
return wxProgressDialog::Update(value, newmsg, 0);
}
};
and
class WXDLLEXPORT wxProgressDialog : public wxDialog
{
DECLARE_DYNAMIC_CLASS(wxProgressDialog)
public:
/* Creates and displays dialog, disables event handling for other
frames or parent frame to avoid recursion problems.
@param title title for window
@param message message to display in window
@param maximum value for status bar, if <= 0, no bar is shown
@param parent window or NULL
@param style is the bit mask of wxPD_XXX constants from wx/defs.h
*/
wxProgressDialog(const wxString &title, wxString const &message,
int maximum = 100,
wxWindow *parent = NULL,
int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE);
/* Destructor.
Re-enables event handling for other windows.
*/
virtual ~wxProgressDialog();
/* Update the status bar to the new value.
@param value new value
@param newmsg if used, new message to display
@returns true if ABORT button has not been pressed
*/
virtual bool Update(int value, const wxString& newmsg = wxEmptyString, bool *skip = NULL);
/* Switches the dialog to use a gauge in indeterminate mode and calls
wxGauge::Pulse() to show to the user a bit of progress */
virtual bool Pulse(const wxString& newmsg = wxEmptyString, bool *skip = NULL);
// Must provide overload to avoid hiding it (and warnings about it)
virtual void Update() { wxDialog::Update(); }
Any ideas to handle this issue? Thanks.
class DerivedClass : public BaseClass
{
using BaseClass::hiddenFunction;
// other stuff.
};
should remove the warnings.
but as seeing the code, may be removed.
Note also that ProgressDialog::operator =
should be private without implementation (or with the 'delete' keyword with C++11).