こんにちは、コードブロックをコンパイルしているときに警告が出ます
\src\..\inc\UTDB_Field.h|56|warning: deprecated covariant return type for 'virtual int* UTDB_intField::get_valField() const'
\src\..\inc\UTDB_Field.h|19|warning: overriding 'virtual void* UTDB_Field::get_valField() const'
実際virtual void* UTDB_Field::get_valField() const
、const は UTDB_Field (基本クラス) の純粋仮想関数であり、virtual int* UTDB_intField::get_valField() const
const は派生関数 (UTDB_intField) です。
co バリアントの戻り値の型が何を意味するかについていくつかの説明を見つけましたが、私が理解したのは、戻り値の型 void* (私の場合) が失われ、int* に置き換えられたということです。それが私の目標です。 return と、各派生クラスが独自のクラスを担当します。
これが、派生クラス UTDB_intField で定義された私の operator== です。
virtual bool operator==(const UTDB_Field& Field) const
{
if(this->typeF==(Field.get_typeField()))
{
if(this->nameF==(Field.get_nameField()))
{
if (this->val== Field.get_valField())
return true;
else
{
std::cout<<" val 1: "<<*(this->get_valField())<<" and val2: "<<*(int*)Field.get_valField() <<" are different"<<std::endl;
return false;
}
}
else
{
std::cout<<" name 1: "<<this->get_nameField()<<" and name 2: "<<Field.get_nameField() <<" are different"<<std::endl;
return false;
}
}
else {
std::cout<<" type "<<this->typeF<<" and "<<Field.get_typeField() <<" are two incomparable types"<<std::endl;
return false;
}
};
これでテストすると:
string a="CurrField";
string* val=&a;
int b=5;
int* val2=&b;
std::cout<<" *Construction*"<<endl;
UTDB_Field* UTField=new UTDB_strField("name",val);
UTDB_Field* UTField2=new UTDB_intField("Currency",val2);
std::cout<<" --------------- "<<std::endl;
std::cout<<"result of comparison "<<(*UTField2==(*UTField))<<endl;
メッセージが表示されます: type int and str are two incomparable types
比較結果 0
したがって、2 つのフィールドのタイプが同じであれば問題ありませんが、そうでない場合は、非互換性のメッセージが表示されるはずです。
どんな助けでも大歓迎です
前もって感謝します