【问题标题】:no overloaded function takes X arguments没有重载函数接受 X 参数
【发布时间】:2015-05-28 06:13:26
【问题描述】:

我正在尝试向此类添加另一个运算符。

它已经有了运算符:

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

标头中的新调用:

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 调用。

【问题讨论】:

  • 发布给出错误的实际代码,大概在main.cpp第226行。
  • 请提供更多详细信息,如main.cpp 中的代码或指定您使用的编译器以及如何调用它,以便我们更具体地为您提供帮助。

标签: c++ operator-overloading


【解决方案1】:

原标题有 10 个参数,新标题有 9 个。

您显然在 C:\vina_code\vinaSingleThread\src\main\main.cpp 226 1 的函数调用中使用了 9 个参数,假设来自错误消息。

但是,编译器似乎使用了monte_carlo::operator()的原始声明,所以它仍然需要10个参数。

确保您使用的是更新后的 monte_carlo 源代码和标头。

提供更多代码后更新

main.cpp:226 中的行尝试构造类 monte_carlo 的对象 mc,而构造函数没有参数。在创建对象之前,您不能使用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 类成员(如果它们对所有实例都是固定的)或默认参数。

【讨论】:

  • 我可以有两个运算符,一个有 9 个参数,另一个有 10 个参数吗?
  • 你可以。我以为你要替换原来的。那你又要加一个吗?添加的方法operator()是否在原始类声明中提到了9个参数?
  • 我相信是的。看看我所做的编辑包括 .cpp 和 .h 文件。谢谢!
  • 愚蠢的我,已经有一段时间了......做到了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-10-20
  • 2017-05-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
相关资源
最近更新 更多