Ошибка компиляции C ++ только с одной функцией-кандидатом - PullRequest
2 голосов
/ 13 июня 2011

При компиляции моего кода я получаю следующую ошибку.Зачем выдает ошибку, если есть только один кандидат?Почему он не может его использовать?

ошибка: нет функции соответствия для вызова '

TemplateParameters::reset_template_params(
  const char [8],
  const char [11],
  std::vector<const Channel*>,
  bool,
  std::map<int, String, std::less<int>,
    std::allocator<std::pair<const int, String> > >&
)

'

примечание: кандидаты:

void TemplateParameters::reset_template_params(
  String,
  String,
  std::vector<const Channel*>&,
  bool,
  std::map<int, String, std::less<int>,
    std::allocator<std::pair<const int, String> > >&
)

Ответы [ 4 ]

4 голосов
/ 13 июня 2011

Между вызовом и кандидатом есть два различия:

  • Первые два String аргумента. Если неявное преобразование литерала C-строки в этот класс не существует, вызов невозможен.

  • Параметр vector против vector&. Я выхожу на конечность и предполагаю, что вы передаете временную функцию во вновь созданный вектор функции. Компилятор не позволяет этого, так как вы не можете привязать временную ссылку к неконстантной ссылке. Использование const-ссылки вместо этого будет работать здесь. Но это, конечно, означает, что параметр не может быть изменен внутри метода.

    Так как вы не показали, как вы называли код, это, конечно, пустые предположения.

1 голос
/ 13 июня 2011

Вы передаете строковые литералы, и ваша функция ожидает String s.Есть ли в вашем классе String (не explicit) конструктор, который можно вызвать с помощью char const*?Если нет, то это ваша проблема.

0 голосов
/ 13 июня 2011

Проверьте ваши параметры. Может, каждая вещь, которую вы дали, напрямую преобразуется в параметры, например: String не может быть как const char [8], так и const char [11], если не указано и не преобразовано явно

0 голосов
/ 13 июня 2011

Ваш вызов функции:

TemplateParameters::reset_template_params() передает 5 параметров, и компилятор не может найти функцию с такими же параметрами.Отсюда и ошибка.

Компилятор может найти функцию TemplateParameters::reset_template_params(), но передаваемые вами параметры не соответствуют объявлению функции, которое компилятор видит для функции TemplateParameters :: reset_template_params ().

Вам нужна перегруженная версия TemplateParameters::reset_template_params() с точно такими же параметрами, с которыми вы вызываете свою функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...