这是有问题的功能:
void Molecule::initSimilarity(int depth)
{
int m = 1;
for (int j = 0; j < depth ; j++)
for (int i = 0 ; i < _size ; i++) //for any atom A
if (!getSetMask( //put all atoms which are equivalnt but not similar to A in their own
//equivalence class
[&](const Atom& b)->bool {return (_atoms[i]->_class == b._class) && !(isSimilar(*_atoms[i],b));},
[&m](Atom& b){b._class = m;} //113
).none()) m++; //114
}
输出:
包含在/ usr / include / c ++ / 4.5 / memory:82:0,
中的文件from /usr/include/boost/dynamic_bitset_fwd.hpp:15, from /usr/include/boost/dynamic_bitset/dynamic_bitset.hpp:36, from /usr/include/boost/dynamic_bitset.hpp:15, from DataStructures/Molecule.h:21, from DataStructures/Molecule.cpp:8:
/ usr / include / c ++ / 4.5 / functional:In 静态成员函数'静态void 的std :: _ Function_handler :: _ M_invoke(常量 std :: _ Any_data&amp;,_ ArgTypes ...)[with _Functor = Molecule :: initSimilarity(int)::, _ArgTypes = {Atom}]':
的/ usr /包括/ C ++ / 4.5 /功能:2103:6: 实例化 “的std ::功能&LT; _res(_ArgTypes ...)&gt; :: function(_Functor,typename 的std :: enable_if≤(! 的std :: is_integral&LT; _Functor&GT; ::值), 的std ::功能&LT; _res(_ArgTypes ...)&gt; :: _ Useless&gt; :: type)[with _Functor = Molecule :: initSimilarity(int)::, _Res = void,_ArgTypes = {Atom},typename std :: enable_if&lt;(! 的std :: is_integral&LT; _Functor&GT; ::值), 的std ::功能&LT; _res(_ArgTypes ...)&gt; :: _ Useless&gt; :: type = 的std ::功能:: _无用]”
数据结构/ Molecule.cpp:114:5:
从这里实例化的/ usr /包括/ C ++ / 4.5 /功能:1713:9: 错误:无法匹配
“(分子:: initSimilarity(INT)::) (原子)”
数据结构/ Molecule.cpp:113:17: 注意:候选人是: 分子:: initSimilarity(INT)::
我不知道这是怎么发生的,究竟是什么意思,我在谷歌找不到任何帮助......
被调用的函数(isSimilar()):
bool Molecule::isSimilar(const Atom &A, const Atom &B)
{
AtomSet S;
for (int i = 0; i < _size; i++)
{
if (!_adjecancy[A._index][i]) continue; //Skip any atoms which aren't adjecant to A
int K = findAtom([&](const Atom& b){return (_adjecancy[B._index][b._index]) && (B._class == b._class) && (!S[B._index]);});
if (K == -1) return false;
S.flip(K);
}
return true;
}
和那个叫它的人:
int Molecule::findAtom(std::function<bool (const Atom)> property, std::function<void (Atom)> action = NULL)
{
for (int i=0 ; i<_size ; i++)
{
if (property(*_atoms[i]))
{
if (action != NULL) action(*_atoms[i]);
return i;
}
}
return -1;
}
使用了typedef:
typedef dynamic_bitset<> AtomSet;
typedef dynamic_bitset<>::size_type atom_ind;
当然还有在错误输出中出现的函数:
AtomSet Molecule::getSetMask(std::function<bool (const Atom)> property, std::function<void (Atom)> action = NULL)
{
dynamic_bitset<> ret(_size);
if (property != NULL) for(int i=0; i<_size ; i++) ret.set(i, property(*_atoms[i]));
return ret;
}
答案 0 :(得分:1)
我在lambda的参数类型中看到了引用,而getSetMask
所需的functor类型中没有引用。
如果你保持一致,你的错误是否仍然存在?
即。如果您想要修改Atom
的操作,则需要
std::function<void (Atom&)> action