无法分配类型为X的对象,因为它的复制运算符被隐式定义

时间:2019-06-27 14:34:51

标签: c++ c++14

我想拥有一个结构B,其中包含一个unordered_map,该struct A作为值具有另一个BASE,其成员具有类型TYPE1的基础对象。这样做是因为我希望能够存储TYPE2unordered_map的对象。若要将基类作为成员,我必须声明它作为参考(请参见下面的代码):

我的问题是,我无法向meta object of type 'A' cannot be assigned because its copy assignment operator is implicitly deleted meta.H["str"] = tmp_hdr; note: copy assignment operator of 'A' is implicitly deleted because field 'hdr' is of reference type 'BASE &' BASE & hdr; 添加任何内容,因为它说:

#include <unordered_map>
#include <string>

class BASE {
public:
    BASE();
    virtual void doSomething()=0;  
    virtual ~BASE() {};
};

class TYPE1 : public BASE {
public:
    TYPE1();
    virtual void doSomething() {};
};

class TYPE2 : public BASE {
public:
    TYPE2();
    virtual void doSomething() {};
};

  struct A{
    bool valid;
    BASE & hdr;
  };

  struct B{
    uint16_t out=-1;
    std::unordered_map<std::string, A&> H;
  };    



int main(void)
{
    TYPE1 b;
    A tmp_hdr = {true, b}; 
    B meta;
    meta.H["str"] = tmp_hdr;

    return 0;
}

简化代码:

<div class="g-recaptcha" data-sitekey="YOUR_KEY"></div>

我在做什么错?是否有更好或不同的方式来实现我想要的?

1 个答案:

答案 0 :(得分:2)

根据所使用的方法,键和值的允许类型受到限制。引用不是默认可构造的,operator []可能会创建默认值。

您可以改用emplace

meta.H.emplace("str", tmp_hdr);

Demo