次のC++コードは正しいと思いますが、「-Woverloaded-virtual」でコンパイルするといくつかの警告が表示されますが、警告が偽であるか、このコードに問題がありますか?それは私がそれを避けるために何ができるか偽の警告がある場合gcc Woverloaded-virtual warnings
は、警告の派生のgetのRIDにすべての例外の仮想バリアントを定義多分よりよい解決策がある
G ++コマンド:
g++ -c -Woverloaded-virtual test.cpp
test.cpp:22:18: warning: ‘virtual void intermediate::exception(const char*)’ was hidden [-Woverloaded-virtual]
test.cpp:32:18: warning: by ‘virtual void derived::exception()’ [-Woverloaded-virtual]
C++コード
using namespace std;
class base
{
public:
virtual void exception() = 0;
virtual void exception(const char*) = 0;
};
class intermediate : public base
{
public:
virtual void exception()
{
cerr << "unknown exception" << endl;
}
virtual void exception(const char* msg)
{
cerr << "exception: " << msg << endl;
}
};
class derived : public intermediate
{
public:
virtual void exception()
{
intermediate::exception("derived:unknown exception");
}
};
意図的な場合、この警告をどのように抑制しますか? – Sampath
私は確信していませんが、私は 'void例外(const char * msg)= delete;'がうまくいくと思います。編集:いいえ、そのような過負荷を削除するエラーです。しかし、これが本当に意図的であれば、うまく設計されたコードで驚くでしょう。派生クラスのインスタンスを基本クラスのインスタンスのように扱うことができるはずです。 –
他の答えに指摘されているように、あなたはそれを 'プライベート'と再定義することができます。 –