为不相交集实现类
struct Set
{
int parent,rank;
Set(int i):parent(i),rank(0){}
Set(const Set& s2):parent(s2.parent),rank(s2.rank){}
};
struct Disjoint
{
std::map<int,Set> forest;
Disjoint(){}
void init_node(int i)
{
forest[i]=Set(i);//error here
}
};
现在编译后我看到了,
/ usr / include / c ++ / 4.7 / bits / stl_map.h:458:错误:没有用于调用'Set :: Set()'的匹配函数
注:候选人是:
DU_SET.cpp:13:5:注意:Set :: Set(const Set&amp;)
DU_SET.cpp:13:5:注意:候选人需要1个参数,0提供
DU_SET.cpp:12:5:注意:Set :: Set(int)
DU_SET.cpp:12:5:注意:候选人需要1个参数,0提供*
我还为类Set实现了复制构造函数,但同样的错误再次出现。 当我实现另一个没有参数的构造函数时它工作正常,但为什么*
答案 0 :(得分:0)
因为在声明中
forest[i]=Set(i);
forest[i]
将尝试使用默认构造函数创建一个Set
对象并放置在该位置。然后使用Set(i)
创建另一个,并使用赋值运算符将其分配到 ith 位置。因此,您必须提供默认构造函数。
要避免使用std::map::insert
方法。
forest.insert( {i, Set(i)} );
答案 1 :(得分:0)