2009-01-21 11 views
0

J'ai demandé à mon équipe de réactiver les avertissements du compilateur. Certains comment tous les avertissements (-w) ont été désactivés (ne demandez pas ...). La plupart d'entre eux sont évidents mais l'un d'entre eux est vraiment énervant. Je l'obtiens de mes cours de date et d'heure qui sont utilisés dans beaucoup d'endroits. L'histoire est vraiment simple. Time est une sous-classe de Date et les deux ont leurs opérateurs définis. Quel peut être le problème avec ça? Voici l'avertissement je reçois:Avertissements et compilateur SunStudio C++

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

Peut-être que quelqu'un peut me lier les documents décrivant ce que chacun des avertissements du compilateur C de SunStudio signifie? Je ne peux pas trouver ça ... Merci!

Répondre

1

Je peux vous aider avec cet avertissement particulier - il ressemble beaucoup à celui-ci de C++ FAQ Lite. Avez-vous par hasard changé le type d'argument que ACTime :: operator utilise de celui dans ACDate?

3

Je l'ai déjà vu avec le compilateur SunStudio. En gros, vous avez une construction comme celle-ci:

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

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

En raison les règles de portée C de, actime :: operator- cache ACDate :: operator- dans le contexte d'un objet actime. C'est assez normal mais le compilateur SunStudio met en garde contre ce problème car il pourrait être le signe d'un qualificatif "virtuel" manquant.

Une solution de contournement pour cette situation serait un explicite 'using ACDate :: operator-' dans la déclaration de classe de ACTime, mais cela pourrait ne pas être ce que vous voulez.

Une autre solution de contournement potentiellement meilleure pour votre situation consiste à faire de l'opérateur une fonction d'ami gratuit, mais cela peut entraîner d'autres problèmes intéressants.

+0

Encore une autre option serait d'utiliser l'héritage privé. Aussi, je pense que les types de retour sont faux: la différence entre deux dates est un intervalle en jours, entre deux fois un intervalle en (fractions) de secondes. – MSalters