0

我说服我的团队再次打开编译器警告。一些如何禁用所有警告(-w)(不要问......)。其中大多数是显而易见的,但其中之一真的很烦人。我从我在很多地方使用的日期和时间课程中得到它。故事真的很简单。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- 将 ACDate::operator- 隐藏在 ACTime 对象的上下文中。这很正常,但 SunStudio 编译器会警告此问题,因为它可能是缺少“虚拟”限定符的标志。

这种情况的一种解决方法是在 ACTime 的类声明中明确“使用 ACDate::operator-”,但这可能不是您想要的。

对于您的情况,另一个可能更好的解决方法是使 operator- 成为免费的朋友功能,但这可能会导致其他有趣的问题。

于 2009-01-21T20:45:04.003 回答
1

我可以帮助你解决这个特定的警告 - 它看起来很像C++ FAQ Lite中的这个。您是否偶然更改了 ACTime::operator- 使用的参数类型,而不是 ACDate 中的参数类型?

于 2009-01-21T20:35:15.757 回答