我正在尝试修补一些遗留代码,并发现此错误与模板有关。
错误:没有匹配函数调用'Clause_new(vec&,bool)'子句* c = minisat :: Clause_new(ps,false);
Clause_new是以下模板的一部分:
namespace minisat
{
class Clause {
public:
// NOTE: This constructor cannot be used directly (doesn't allocate enough memory).
template<class V>
Clause(V& ps, bool learnt) {...}
template<class V>
friend Clause* Clause_new(V& ps, bool learnt = false) {...};
}}
然后在这里调用Clause_new:
bool Solver::addClause(vec<Lit>& ps)
{
if (!ok)
...
else{
... //ps can change here
}
if (ps.size() == 0)
...
else if (ps.size() == 1){
...
}else{
Clause* c = minisat::Clause_new(ps, false);
...
}
return true;
}
我已经尝试将ps的声明更改为const(修改相应的方法声明),但后来我得到了这个错误:
错误:将'const minisat :: Lit'传递为'this'参数会丢弃限定符[-fpermissive]。