ошибка: нет подходящей функции для вызова - PullRequest
1 голос
/ 01 сентября 2011
#include <iostream>
using namespace std;

template <typename x> x functionA (x, x);

int main ()
{
    functionA <double, double, double> (1, 1) << "\n";
}

template <typename x> x functionA (x arg1, x arg2)
{
    return arg1 + arg2;
}

Этот код приводит к:

error: no matching function for call to ‘functionA(int, int)’

В чем могут быть причины?

Ответы [ 5 ]

2 голосов
/ 01 сентября 2011

Здесь две вещи не так.Во-первых, вам нужно указать только один тип для шаблона:

functionA<double>(1, 1)

Во-вторых, вам не хватает std::cout в начале этой строки.

1 голос
/ 01 сентября 2011

Строка должна быть,

std::cout << functionA <double> (1, 1) << "\n";
^^^^^^^missing          ^^^^^^only 1 argument

Поскольку functionA принимает только 1 аргумент шаблона, и, следовательно, вы должны явно вызывать только с одним аргументом шаблона.

3 аргумента нужны в том случае, если бы ваш functionA был похож,

template <typename x, typename y, typename z>
x functionA (y arg1, z arg2)
{
    return arg1 + arg2;
}
1 голос
/ 01 сентября 2011

Шаблон функции имеет только один параметр шаблона, и вы передаете ему 3 аргументы шаблона:

functionA <double, double, double> (1, 1) << "\n";

Почему 3 аргументы шаблона?

Просто напишите:

functionA <double> (1, 1);

Или вы можете просто позволить компилятору выводить аргумент шаблона, как:

functionA(1.0, 1.0);  //template argument deduced as double!
functionA(1, 1);     //template argument deduced as int!
1 голос
/ 01 сентября 2011

Это неправильно: functionA <double, double, double> (1, 1). Вы пытаетесь вызвать functionA() с тремя параметрами шаблона, в то время как ваше объявление functionA имеет только 1 параметр шаблона.

Кроме того, << "\n"; после вызова также не имеет никакого смысла.

0 голосов
/ 01 сентября 2011

Вам не нужно указывать типы несколько раз.Если ваш возвращаемый тип и аргумент функции одинаковы, вам даже не нужно указывать тип.Код ниже компилируется нормально.

std::cout << functionA(1, 1) << std::endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...