Domanda

Ho convinto il mio team a riattivare gli avvisi del compilatore. Alcuni come tutti gli avvisi (-w) sono stati disabilitati (non chiedere ...). Molti di loro sono ovvi, ma uno di essi è davvero fastidioso. Lo ottengo dalle mie classi di data e ora che vengono utilizzate in molti luoghi. La storia è davvero semplice. L'ora è una sottoclasse di Date ed entrambi hanno i loro operatori definiti. Cosa può esserci di sbagliato in questo? Ecco l'avvertimento che ricevo:

Warning: ACTime::operator- hides the function ACDate::operator-(const ACDate&) const.

Forse qualcuno può collegarmi ai documenti che descrivono il significato di ciascuno degli avvisi del compilatore C ++ di SunStudio? Non riesco a trovare questo ... Grazie!

È stato utile?

Soluzione

Posso aiutarti con quel particolare avvertimento - assomiglia molto a questo da C ++ FAQ Lite . Per caso hai cambiato il tipo di argomento che ACTime :: operator- utilizza da quello in ACDate?

Altri suggerimenti

L'ho già visto prima con il compilatore SunStudio. Fondamentalmente, hai un costrutto come questo:

class ACDate
{
   public:
     ACDate &operator-(const ACDate &);
};

class ACTime : public ACDate
{
    public:
    ACTime &operator-(const ACTime &);
};

A causa delle regole di scoping C ++, ACTime :: operator- nasconde ACDate :: operator- nel contesto di un oggetto ACTime. Questo è abbastanza normale ma il compilatore SunStudio avverte di questo problema in quanto potrebbe essere un segno di un qualificatore "virtuale" mancante.

Una soluzione alternativa per questa situazione sarebbe un esplicito "utilizzo di ACDate :: operator-" nella dichiarazione di classe di ACTime, ma potrebbe non essere quello che desideri.

Un'altra soluzione potenzialmente migliore per la tua situazione è quella di rendere l'operatore un amico gratuito, ma ciò potrebbe portare ad altri problemi interessanti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top