0

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

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

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

4

2 に答える 2

3

これは 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 のクラス宣言で明示的に「ACDate::operator- を使用する」ことですが、それはあなたが望むものではないかもしれません。

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

于 2009-01-21T20:45:04.003 に答える
1

私はその特定の警告についてあなたを助けることができます-それはC++FAQLiteからのこれによく似ています。ACTime :: operator-が使用する引数のタイプをACDateの引数のタイプから偶然に変更しましたか?

于 2009-01-21T20:35:15.757 に答える