c ++ не существует подходящего конструктора для преобразования из "int" в "std :: pair" " - PullRequest
0 голосов
/ 12 июля 2020

Мне не удается разрешить эту ошибку. Мне не везет в Google, когда я ищу эту ошибку.

не существует подходящего конструктора для преобразования из int в std :: pair "

#include <utility>

using namespace std;

pair<int, int> solve(int s, int g)
{
    return s % g != 0 ? (-1, -1) : (g, s - g);
}

Волнистая линия ошибки находится под первым s в возврате, где выполняется проверка ...

s% g! = 0

Я не могу понять, как это решить. В C# это сработает.

public static (int, int) solve(int s, int g) => s % g != 0 ? (-1, -1) : (g, s - g);

1 Ответ

7 голосов
/ 12 июля 2020

(a, b) - это не пара, это выражение с использованием оператора запятой. Он оценивает как a, так и b, но результат выражения - это только b. Вот почему он жалуется, что не может преобразовать ваш single int в pair.

Например:

d = (a++, b+=3, c);

будет:

  • добавить единицу к a;
  • добавить три к b; и
  • установить d на любое значение c.

Если вам нужна пара фактическая , вы должны использовать что-то вроде std::make_pair(a, b) . В вашем конкретном случае это будет примерно так:

return (s % g != 0) ? make_pair(-1, -1) : make_pair(g, s - g);
...