我想拥有一个结构B
,其中包含一个unordered_map
,该struct A
作为值具有另一个BASE
,其成员具有类型TYPE1
的基础对象。这样做是因为我希望能够存储TYPE2
和unordered_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>
我在做什么错?是否有更好或不同的方式来实现我想要的?
答案 0 :(得分:2)
根据所使用的方法,键和值的允许类型受到限制。引用不是默认可构造的,operator []
可能会创建默认值。
您可以改用emplace
:
meta.H.emplace("str", tmp_hdr);