Avisos e compilador SunStudio C ++
Pergunta
Eu falei a minha equipe para ligar os avisos do compilador novamente. Alguns como todos os avisos (w) foram desativados (não pergunte ...). A maioria deles são óbvios, mas um deles é realmente irritante. Eu obtê-lo de meus data e hora classes que são usados ??em muitos lugares. História é realmente simples. O tempo é subclasse de Data e ambos têm seus operadores definidos. O que pode estar errado com isso? Aqui está o aviso que eu recebo:
Warning: ACTime::operator- hides the function ACDate::operator-(const ACDate&) const.
Talvez alguém pode me ligar os documentos que descrevem o que cada um dos SunStudio C ++ avisos do compilador significa? Não consigo encontrar esse ... Obrigado!
Solução
Eu posso ajudá-lo com esse aviso em particular - ele se parece muito com um presente de C ++ FAQ Lite . Fez-lhe pela mudança chance do tipo de argumento que usos ACTime :: operadora daquele em ACDate?
Outras dicas
Eu já vi isso antes com o compilador SunStudio. Basicamente, você tem uma construção como esta:
class ACDate
{
public:
ACDate &operator-(const ACDate &);
};
class ACTime : public ACDate
{
public:
ACTime &operator-(const ACTime &);
};
Devido ao C ++ escopo regras, ACTime :: operator- peles ACDate :: operadora no contexto de um objeto ACTime. Isso é muito normal, mas o compilador SunStudio adverte sobre este problema, pois pode ser um sinal de um qualificador de 'virtual' em falta.
Uma solução para esta situação seria um explícita 'usando ACDate :: operator-' na declaração da classe de ACTime, mas que pode não ser o que quiser.
Outra, potencialmente melhor solução para a sua situação é fazer com que a operadora uma função amigo livre, mas isso pode levar a outros problemas interessantes.