大家好,我在使用代码块编译代码时收到一些警告,这些代码块不知道这是什么意思,应该忽略它们,否则会在执行过程中反映我的程序
\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 variant 返回类型的含义的解释,但我的理解是返回类型 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;
我得到我的信息:类型 int 和 str 是两种无与伦比的类型
比较结果 0
因此,如果两个字段具有相同的类型,那么我知道我有什么类型是可以的,但如果他们没有,我应该有不兼容的消息。
任何帮助将不胜感激
提前致谢