没有重载函数接受 X 个参数
no overloaded function takes X arguments
我正在尝试向此 class 添加另一个运算符。
它已经有运算符:
void operator()(model& m, output_container& out, const precalculate& p, const igrid& ig, const precalculate& p_widened, const igrid& ig_widened, const vec& corner1, const vec& corner2, incrementable* increment_me, rng& generator) const;
我只想删除 "incrementable* increment_me" 部分。所以我从调用和代码本身中删除了它。由于某种原因,它给出了以下错误。
错误:
Error 2 error C2661: 'monte_carlo::monte_carlo' : no overloaded function takes 9 arguments C:\vina_code\vinaSingleThread\src\main\main.cpp 226 1 vinaSingleThread
header中的新来电:
void operator()(model& m, output_container& out, const precalculate& p, const igrid& ig, const precalculate& p_widened, const igrid& ig_widened, const vec& corner1, const vec& corner2, rng& generator) const;
cpp中的新调用:
void monte_carlo::operator()(model& m, output_container& out, const precalculate& p, const igrid& ig, const precalculate& p_widened, const igrid& ig_widened, const vec& corner1, const vec& corner2, rng& generator) const
{
vec authentic_v(1000, 1000, 1000); // FIXME? this is here to avoid max_fl/max_fl
conf_size s = m.get_size();
change g(s);
output_type tmp(s, 0);
tmp.c.randomize(corner1, corner2, generator);
fl best_e = max_fl;
quasi_newton quasi_newton_par; quasi_newton_par.max_steps = ssd_par.evals;
VINA_U_FOR(step, num_steps)
{
output_type candidate = tmp;
mutate_conf(candidate.c, m, mutation_amplitude, generator);
quasi_newton_par(m, p, ig, candidate, g, hunt_cap);
if(step == 0 || metropolis_accept(tmp.e, candidate.e, temperature, generator))
{
tmp = candidate;
m.set(tmp.c); // FIXME? useless?
// FIXME only for very promising ones
if(tmp.e < best_e || out.size() < num_saved_mins)
{
quasi_newton_par(m, p, ig, tmp, g, authentic_v);
m.set(tmp.c); // FIXME? useless?
tmp.coords = m.get_heavy_atom_movable_coords();
add_to_output_container(out, tmp, min_rmsd, num_saved_mins); // 20 - max size
if(tmp.e < best_e)
best_e = tmp.e;
}
}
}
VINA_CHECK(!out.empty());
VINA_CHECK(out.front().e <= out.back().e); // make sure the sorting worked in the correct order
}
我做错了什么?谢谢!!
编辑(抱歉,应该添加这个):
主调用(第 226 行):
monte_carlo mc(m, out_cont, prec, ig, prec_widened, ig_widened, corner1, corner2, generator);
完整文件如下:
monet_carlo.cpp: http://pastebin.com/raw.php?i=wM3uVqKt
monte_carlo.h: http://pastebin.com/raw.php?i=WV1fSbmv
main: 太大而无法包含,请查看 main 调用。
原来的header有10个参数,新的header有9个。
根据错误消息,您显然在 C:\vina_code\vinaSingleThread\src\main\main.cpp 226 1
中的函数调用中使用了 9 个参数。
但是,编译器似乎使用了monte_carlo::operator()
的原始声明,所以它仍然需要10个参数。
确保您使用的是更新后的 monte_carlo 来源和 header。
提供更多代码后更新
来自 main.cpp:226 的行试图构造 class monte_carlo
的 object mc
而构造函数没有参数。在创建 object 之前,您不能使用 operator()
(就像任何其他方法一样)。尝试将其更改为以下内容:
monte_carlo mc;
// Now the object is created and we can use its methods, for example operator().
mc(m, out_cont, prec, ig, prec_widened, ig_widened, corner1, corner2, generator);
顺便说一句,您将大量常量值传递给构造函数初始化列表中的成员变量。我会让它们成为 static const
class 成员(如果它们对所有实例都是固定的)或默认参数。
我正在尝试向此 class 添加另一个运算符。
它已经有运算符:
void operator()(model& m, output_container& out, const precalculate& p, const igrid& ig, const precalculate& p_widened, const igrid& ig_widened, const vec& corner1, const vec& corner2, incrementable* increment_me, rng& generator) const;
我只想删除 "incrementable* increment_me" 部分。所以我从调用和代码本身中删除了它。由于某种原因,它给出了以下错误。
错误:
Error 2 error C2661: 'monte_carlo::monte_carlo' : no overloaded function takes 9 arguments C:\vina_code\vinaSingleThread\src\main\main.cpp 226 1 vinaSingleThread
header中的新来电:
void operator()(model& m, output_container& out, const precalculate& p, const igrid& ig, const precalculate& p_widened, const igrid& ig_widened, const vec& corner1, const vec& corner2, rng& generator) const;
cpp中的新调用:
void monte_carlo::operator()(model& m, output_container& out, const precalculate& p, const igrid& ig, const precalculate& p_widened, const igrid& ig_widened, const vec& corner1, const vec& corner2, rng& generator) const
{
vec authentic_v(1000, 1000, 1000); // FIXME? this is here to avoid max_fl/max_fl
conf_size s = m.get_size();
change g(s);
output_type tmp(s, 0);
tmp.c.randomize(corner1, corner2, generator);
fl best_e = max_fl;
quasi_newton quasi_newton_par; quasi_newton_par.max_steps = ssd_par.evals;
VINA_U_FOR(step, num_steps)
{
output_type candidate = tmp;
mutate_conf(candidate.c, m, mutation_amplitude, generator);
quasi_newton_par(m, p, ig, candidate, g, hunt_cap);
if(step == 0 || metropolis_accept(tmp.e, candidate.e, temperature, generator))
{
tmp = candidate;
m.set(tmp.c); // FIXME? useless?
// FIXME only for very promising ones
if(tmp.e < best_e || out.size() < num_saved_mins)
{
quasi_newton_par(m, p, ig, tmp, g, authentic_v);
m.set(tmp.c); // FIXME? useless?
tmp.coords = m.get_heavy_atom_movable_coords();
add_to_output_container(out, tmp, min_rmsd, num_saved_mins); // 20 - max size
if(tmp.e < best_e)
best_e = tmp.e;
}
}
}
VINA_CHECK(!out.empty());
VINA_CHECK(out.front().e <= out.back().e); // make sure the sorting worked in the correct order
}
我做错了什么?谢谢!!
编辑(抱歉,应该添加这个):
主调用(第 226 行):
monte_carlo mc(m, out_cont, prec, ig, prec_widened, ig_widened, corner1, corner2, generator);
完整文件如下:
monet_carlo.cpp: http://pastebin.com/raw.php?i=wM3uVqKt
monte_carlo.h: http://pastebin.com/raw.php?i=WV1fSbmv
main: 太大而无法包含,请查看 main 调用。
原来的header有10个参数,新的header有9个。
根据错误消息,您显然在 C:\vina_code\vinaSingleThread\src\main\main.cpp 226 1
中的函数调用中使用了 9 个参数。
但是,编译器似乎使用了monte_carlo::operator()
的原始声明,所以它仍然需要10个参数。
确保您使用的是更新后的 monte_carlo 来源和 header。
提供更多代码后更新
来自 main.cpp:226 的行试图构造 class monte_carlo
的 object mc
而构造函数没有参数。在创建 object 之前,您不能使用 operator()
(就像任何其他方法一样)。尝试将其更改为以下内容:
monte_carlo mc;
// Now the object is created and we can use its methods, for example operator().
mc(m, out_cont, prec, ig, prec_widened, ig_widened, corner1, corner2, generator);
顺便说一句,您将大量常量值传递给构造函数初始化列表中的成员变量。我会让它们成为 static const
class 成员(如果它们对所有实例都是固定的)或默认参数。