質問

私はチームに、コンパイラの警告を再び有効にするように話しました。すべての警告(-w)が無効になった方法(質問しないでください...)。それらのほとんどは明らかですが、そのうちの1つは本当に迷惑です。多くの場所で使用されている日付と時刻のクラスから取得します。ストーリーは本当にシンプルです。 TimeはDateのサブクラスであり、両方に演算子が定義されています。何が悪いのでしょうか?警告は次のとおりです。

Warning: ACTime::operator- hides the function ACDate::operator-(const ACDate&) const.

おそらく、誰かがSunStudio C ++コンパイラの各警告の意味を説明しているドキュメントにリンクできますか?これが見つかりません...ありがとう!

役に立ちましたか?

解決

その特定の警告であなたを助けることができます- C ++ FAQ Lite 。 ACTime :: operator-が使用する引数のタイプをACDateのものから偶然変更しましたか?

他のヒント

SunStudioコンパイラでこれを見たことがあります。基本的に、次のような構造があります:

class ACDate
{
   public:
     ACDate &operator-(const ACDate &);
};

class ACTime : public ACDate
{
    public:
    ACTime &operator-(const ACTime &);
};

C ++スコープ規則により、ACTime :: operator-はACTimeオブジェクトのコンテキストでACDate :: operator-を非表示にします。これは非常に正常ですが、SunStudioコンパイラは「仮想」修飾子が欠落している兆候である可能性があるため、この問題について警告します。

この状況の回避策の1つは、ACTimeのクラス宣言で明示的に「using ACDate :: operator-」を使用することですが、それは望んでいない場合があります。

別の、潜在的にあなたの状況に対するより良い回避策は、オペレーターを無料のフレンド機能にすることですが、それは他の興味深い問題につながる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top