Je suis novice en C++/CLI et rencontre des problèmes pour tenter de surcharger la méthode Equal de la classe Object de base. Je reçois l'erreur d'avertissement de compilation suivante pour le code suivant. Comment cela devrait-il être corrigé?C++/CLI: comment redéfinir la méthode Equal de la classe Object
Warning 1 warning C4490: 'override' : incorrect use of override specifier; 'Test::Sample::Equal' does not match a base ref class method c:\project\code\Sample.h 18
Error 2 error LNK2022: metadata operation failed (80131187) : Inconsistent method declarations in duplicated types (types: Test.Sample; methods: Equal): (0x06000002). Sample.obj
Edit 3: J'ai changé "égal" à "Equals", mot-clé override supprimé dans le fichier source, mais l'erreur 2 est toujours debout.
// tête de fichier
public ref class Sample : public Object
{
public:
int someVariable;
virtual bool Equals(Object^ obj) override;
virtual int GetHashCode() override;
}
// Fichier source
bool Sample::Equals(Object^ obj)
{
if (obj == nullptr || GetType() != obj->GetType())
return false;
Sample^ p = dynamic_cast<Sample^>(obj);
return (someVariable == p->someVariable);
}
int Sample::GetHashCode()
{
return GetHashCode();
}
La mise en œuvre de GetHashCode devrait utiliser les mêmes variables que vous utilisez dans votre implémentation Equals, tels que:
int Sample::GetHashCode() { return someVariable->GetHashCode(); }
–