English 中文(简体)
警告和SunStudio C ++编译器
原标题:
  • 时间:2009-01-21 20:24:31
  •  标签:

我说服我的团队再次开启编译器警告。不知何故,所有警告(-w)都被禁用了(不要问为什么...)。他们中的大多数都是显而易见的,但其中一个真的很烦人。我从我的日期和时间类中获得它,这些类在许多地方都被使用。故事真的很简单。时间是日期的子类,它们都定义了它们的运算符。有什么问题吗?这是我收到的警告:

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编译器会警告这个问题,因为它可能是缺少虚拟限定词的迹象。

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

另一种可能更好的解决方法是将运算符-作为自由的友元函数,但这可能会导致其他有趣的问题。





相关问题
热门标签