Это проблематичная функция:
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 / функционал: в статической функции-члене 'static void std :: _ Function_handler :: _ M_invoke (const std :: _ Any_data &, _ArgTypes ...) [with _Functor =Molecule :: initSogeneity (int) ::, _ArgTypes = {Atom}] ':
/ usr / include / c ++ / 4.5 / functions: 2103: 6: создается из' std :: function <_Res (_ArgTypes)...)> :: function (_Functor, typename std :: enable_if <(! std :: is_integral <_Functor> :: value), std :: function <_Res (_ArgTypes ...)> :: _ Бесполезно> ::type) [with _Functor = Molecule :: initSimility (int) ::, _Res = void, _ArgTypes = {Atom}, имя типа std :: enable_if <(! std :: is_integral <_Functor> :: value), std :: function<_Res (_ArgTypes ...)> :: _ Бесполезно> :: type = std :: function :: _ Бесполезно] '
DataStructures / Molecule.cpp: 114: 5:
создан здесь
/ usr / include / c ++ / 4.5 / function: 1713: 9: ошибка: нет соответствия длявызов
'(Molecule :: initS Similarity (int): :) (Atom)'
DataStructures / Molecule.cpp: 113: 17: примечание: кандидатом является: Molecule :: initS Similarity (int) ::
Понятия не имею, как это происходит и что именно это означает, и я тоже не смог найти никакой помощи в Google ...
Вызванная функция (isS Similar ()):
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;
}
использовал typedefs:
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;
}