2009-01-21 270 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