c++ - 我可以按值(复制)从一个 std::vector 插入一个对象到另一个吗?

标签 c++ call-by-value

(我意识到这是我程序中的一个复制粘贴错误。但是,我准确地得到该错误消息的原因对其他人来说仍然很有趣,因此,我更新了这个问题。)

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

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

vector 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 的元素按值插入 。我如何告诉编译器他应该只制作一个拷贝而不是传递引用?

最佳答案

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

问题不在于拷贝,而在于 domains 的类型应该是 vector<DomainMember*> (或 d 应该是 vector<Domain*> ,你的电话)为你的 push_back去工作。

关于c++ - 我可以按值(复制)从一个 std::vector 插入一个对象到另一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28853884/

相关文章:

C++ 指针用法

java - 按引用调用或按值调用

c++ - 按值|引用调用的另一个问题

pass-by-reference - 当我们在此函数中按值传递结果时会发生什么?

c++ - QTableView 在模型刷新后保留选择

c++ - Linux 中 sd 卡引脚的控制

c++ - constexpr 和 inline 函数可以重新定义吗?

c - 这个调用在 C 中是通过引用调用还是通过值调用?

java - 当我在java中创建一个对象时,jvm中到底发生了什么?

c++如何将编译器选项检测为字符串