返回一个向量元素

时间:2014-12-03 01:04:47

标签: c++ vector return-type

我有一个包含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呢?

1 个答案:

答案 0 :(得分:0)

你的向量包含指针,你返回*它是一个指针,但你的签名会返回一个对象。

使用:

return **it;

除非没有匹配!

最好返回迭代器

vector<FieldBase*>::iterator GetField( ....

...

return it;
}

从长远来看,您最好学习如何使用std :: find()