我可以通过值(复制)从一个std :: vector插入一个对象吗?

时间:2015-03-04 11:57:51

标签: c++ call-by-value

(我意识到这是我程序中的复制粘贴错误。但原因是,为什么我得到错误的错误信息对于其他人来说仍然很有趣,因此,我更新了问题。)

我有以下代码片段,它将一个向量的元素复制到另一个向量中。也许这可以更优雅地解决,但这不应该是这里的问题(当然,除非我真正想做的事情是绝对愚蠢的。)

void DomainClass::addMembers(vector<DomainMember*>& d){
    for(int i = 0; i < d.size(); i ++){
        this->domains.push_back(d[i]);
    }
}

向量this->domains是具有定义的成员:

vector<Domain*> domains;

编译器告诉我:错误:

reference to type 'const value_type' (aka 'Domain *const') could not bind to an lvalue of type 'value_type' (aka 'DomainMember *')

当我想通过参考来处理对象时,我基本上理解了这个问题,但在这种情况下,我想将d BY VALUE的元素插入domains。我如何告诉编译器他应该只复制而不是传递引用?

1 个答案:

答案 0 :(得分:1)

错误告诉您的是,您尝试将DomainMember*类型的对象(在d中)放入类Domain*的对象中(在domains中)。编译器不知道如何从DomainMember转换为Domain

问题不在于副本,事实是domains的类型应该是vector<DomainMember*>(或d应该是vector<Domain*>,致电)push_back工作。