C++/CLI:オブジェクトクラスのEqualメソッドをオーバーライドする方法
-
11-09-2019 - |
質問
私は C++/CLI の初心者で、基本オブジェクト クラスの Equal メソッドをオーバーライドしようとしているときに問題が発生しています。次のコードに対して次のコンパイル警告エラーが表示されます。これはどのように修正すればよいでしょうか?
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
編集3:「Equal」を「Equals」に変更し、ソースファイルの override キーワードを削除しましたが、エラー 2 が依然として発生します。
// ヘッダファイル
public ref class Sample : public Object
{
public:
int someVariable;
virtual bool Equals(Object^ obj) override;
virtual int GetHashCode() override;
}
// ソースファイル
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();
}
解決
メソッドの名前は、それがEqual
だ、Equals
ではありません。あなたは、実装にvirtual
またはoverride
キーワードを使用しないでください。
ref class Test {
public:
virtual bool Equals(Object^ o) override;
virtual int GetHashCode() override;
};
bool Test::Equals(Object^ o) { // no "override" here
//...
}
int Test::GetHashCode() { // no "override" here
//...
}
所属していません StackOverflow