Вопрос

Я убедил мою команду снова включить предупреждения компилятора. Некоторые, как все предупреждения (-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, но это может быть не то, что вам нужно.

Другой, потенциально более эффективный обходной путь для вашей ситуации, - это сделать оператор свободной функцией друга, но это может привести к другим интересным проблемам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top