我有一个包含FieldBase类型对象的向量。我正在尝试搜索具有特定名称的FieldBase元素并将其返回。
我收到了错误:
错误C2664:'FieldBase :: FieldBase(const FieldBase&)':不能 将参数1从'FieldBase *'转换为'const FieldBase&' 1 GT;
原因:无法从'FieldBase *'转换为'const FieldBase'1>
没有构造函数可以采用源类型或构造函数重载 决议是模糊的
这是我的FieldBase
班级
class FieldBase {
public:
FieldBase();
CString name;
bool state;
int size;
CString getName();
void setName(CString name);
bool getState();
void setState(bool state);
int getSize();
void setSize(int size);
};
这是尝试返回对象的方法:
FieldBase GetField(CString name) {
vector<FieldBase*>::iterator it;
for (it = m_Message.begin(); it != m_Message.end(); ++it) {
if (name.Compare((*it)->getName()) == 0) {
break;
}
}
return *it;
}
也许值得一提的另一个问题是(*it)->getName()
如何不提出编译错误但返回*it
呢?
答案 0 :(得分:0)
你的向量包含指针,你返回*它是一个指针,但你的签名会返回一个对象。
使用:
return **it;
除非没有匹配!
最好返回迭代器
vector<FieldBase*>::iterator GetField( ....
...
return it;
}
从长远来看,您最好学习如何使用std :: find()