Pregunta

Hice que mi equipo volviera a activar las advertencias del compilador. De alguna manera, se deshabilitaron todas las advertencias (-w) (no preguntar ...). La mayoría de ellos son obvios, pero uno de ellos es realmente molesto. Lo obtengo de mis clases de fecha y hora que se utilizan en muchos lugares. La historia es realmente simple. El tiempo es una subclase de fecha y ambos tienen sus operadores definidos. ¿Qué puede estar mal con eso? Aquí está la advertencia que recibo:

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

¿Quizás alguien pueda vincularme con los documentos que describen lo que significa cada una de las advertencias del compilador SunStudio C ++? No puedo encontrar esto ... ¡Gracias!

¿Fue útil?

Solución

Puedo ayudarlo con esa advertencia en particular: se parece mucho a esta de Preguntas frecuentes de C ++ Lite . ¿Cambió por casualidad el tipo de argumento que ACTime :: operator- usa del de ACDate?

Otros consejos

He visto esto antes con el compilador SunStudio. Básicamente, tienes una construcción como esta:

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

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

Debido a las reglas de alcance de C ++, ACTime :: operator- oculta ACDate :: operator- en el contexto de un objeto ACTime. Esto es bastante normal, pero el compilador SunStudio advierte sobre este problema, ya que podría ser una señal de que falta un calificador 'virtual'.

Una solución alternativa para esta situación sería un 'uso explícito de ACDate :: operator-' en la declaración de clase de ACTime, pero eso podría no ser lo que desea.

Otra solución alternativa potencialmente mejor para su situación es hacer que el operador sea una función de amigo gratuita, pero eso podría generar otros problemas interesantes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top