2009-01-21 124 views
0

我让我的团队再次打开编译器警告。一些警告(-w)如何被禁用(不要问...)。他们中的大多数是显而易见的,但其中一个真的很烦人。我从许多地方使用的日期和时间课程中获得它。故事非常简单。 Time是Date的子类,并且它们都定义了它们的操作符。那有什么不对?这里的警告,我得到:警告和SunStudio C++编译器

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

也许有人可以链接我的文档描述了每个SunStudio C++编译器警告的意思吗?我找不到这个......谢谢!

回答

1

我可以帮你处理这个特别的警告 - 它看起来很像这个从C++ FAQ Lite。你是否偶然地改变了ACTime :: operator-从ACDate中使用的参数的类型?

3

我以前用SunStudio编译器见过这个。基本上,你有一个这样的构建体:

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

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

由于C++范围规则,ACTime ::操作符 - 隐藏ACDate ::在ACTime对象的上下文操作符 - 。这很正常,但是SunStudio编译器会警告这个问题,因为它可能是缺少“虚拟”限定符的标志。

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

另一个可能更好的解决方法是让操作员成为免费的好友功能,但这可能会导致其他有趣的问题。

+0

另一种选择是使用私有继承。另外,我认为返回类型是错误的:两个日期之间的差异是以天为单位的时间间隔,以秒为单位的(分数)间隔的两倍。 – MSalters 2009-01-22 13:31:50