我说服我的团队再次打开编译器警告。一些所有警告(-w)是如何被禁用的(不要问...)。它们中的大多数都是显而易见的,但其中有一个是非常恼人的。我从我的date和time类中得到了它,这些类在很多地方都被使用过。故事真的很简单。Time是Date的子类,它们都定义了自己的运算符。这有什么错呢?下面是我得到的警告:
Warning: ACTime::operator- hides the function ACDate::operator-(const ACDate&) const.也许有人可以链接到描述每个SunStudio C++编译器警告的文档?我找不到这个。谢谢!
发布于 2009-01-21 20:35:16
我可以帮你解决这个特殊的警告--它看起来很像C++ FAQ Lite中的这个。您是否无意中更改了ACTime::operator使用的参数类型,而不是ACDate中的类型?
发布于 2009-01-21 20:45:04
我以前在SunStudio编译器中见过这种情况。基本上,你有一个像这样的结构:
class ACDate
{
public:
ACDate &operator-(const ACDate &);
};
class ACTime : public ACDate
{
public:
ACTime &operator-(const ACTime &);
};由于C++作用域规则,ACTime::operator-在ACTime对象的上下文中隐藏ACDate::operator-。这很正常,但SunStudio编译器会对此问题发出警告,因为这可能是缺少“虚拟”限定符的迹象。
这种情况的一种解决方法是在ACTime的类声明中显式地使用“using ACDate::operator-”,但这可能不是您想要的。
对于您的情况,另一个可能更好的解决方法是使操作符成为一个免费的朋友函数,但这可能会导致其他有趣的问题。
https://stackoverflow.com/questions/466827
复制相似问题