首先
课程的可能原因是:
operator =
受保护copy-ctor
public?其次:
考虑以下设计:
class WeirdDesign
{
public :
WeirdDesign(const WeirdDesign& ){}
protected:
WeirdDesign& operator=(const WeirdDesign&){}
};
struct A
{
typedef std::vector<WeirdDesign> mytype;
void method(const mytype& elements)
{
// access to elements
}
};
class B
{
void inserter()
{
std::unordered_map < std::string, A::mytype > mymap;
mymap.insert(std::make_pair("0", A::mytype())); //fail at linking
A().method(mymap.find("0")->second);
}
};
当我尝试在B::mymap_
中插入元素时,链接器无法解析operator=
的{{1}}?为什么?
答案 0 :(得分:0)
标准容器的某些操作要求值类型为CopyAssignable。 std :: vector的这种操作的一个例子是成员函数insert
。
同样适用于标准关联容器。在第23.2.4节的第7节中,C ++标准的关联容器有注释
[注意:例如,在某些情况下,key_type和mapped_type是 即使关联的value_type,也需要是CopyAssignable, 对,不是CopyAssignable。 - 后注]