Предупреждения и компилятор SunStudio C ++
Вопрос
Я убедил мою команду снова включить предупреждения компилятора. Некоторые, как все предупреждения (-w) были отключены (не спрашивайте ...). Большинство из них очевидны, но один из них действительно раздражает. Я получаю это из своих уроков по дате и времени, которые используются во многих местах. История действительно проста. Время является подклассом Date, и у них обоих определены операторы. Что может быть не так с этим? Вот предупреждение, которое я получаю:
Warning: ACTime::operator- hides the function ACDate::operator-(const ACDate&) const.
Возможно, кто-нибудь может связать меня с документами, описывающими, что означают каждое из предупреждений компилятора SunStudio C ++? Я не могу найти это ... Спасибо!
Решение
Я могу помочь вам с этим конкретным предупреждением - оно выглядит очень похоже на это с "rel =" nofollow noreferrer "> 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 скрывает ACDate :: operator- в контексте объекта ACTime. Это вполне нормально, но компилятор SunStudio предупреждает об этой проблеме, поскольку это может быть признаком отсутствия виртуального квалификатора.
Одним из обходных путей в этой ситуации может быть явное «использование ACDate :: operator-» в объявлении класса ACTime, но это может быть не то, что вам нужно.
Другой, потенциально более эффективный обходной путь для вашей ситуации, - это сделать оператор свободной функцией друга, но это может привести к другим интересным проблемам.