Поделиться через


Ошибка компилятора C3499

заданное лямбда-выражение с возвращаемым типом void не может возвращать значение

Компилятор создает эту ошибку, когда лямбда-выражение, которое указывает void в качестве типа возвращаемого значения, возвращает значение; или когда лямбда-выражение содержит несколько операторов и возвращает значение, но не указывает его тип.

Исправление ошибки

  • Не возвращайте значение из лямбда-выражения.

  • Либо укажите тип возвращаемого значения лямбда-выражения.

  • Либо объедините операторы, которые составляют текст лямбда-выражения, в один оператор.

Примеры

Следующий пример приводит к возникновению ошибки C3499, так как текст лямбда-выражения содержит несколько инструкций и возвращает значение, но лямбда-выражение не указывает тип возвращаемого значения:

// C3499a.cpp

int main()
{
   [](int x) { int n = x * 2; return n; } (5); // C3499
}

В следующем примере показано два возможных способа устранения ошибки C3499. В первом решении указывается тип возвращаемого значения лямбда-выражения. Во втором решении объединяются операторы, которые составляют лямбда-выражение, в один оператор.

// C3499b.cpp

int main()
{
   // Possible resolution 1:
   // Provide the return type of the lambda expression.
   [](int x) -> int { int n = x * 2; return n; } (5);

   // Possible resolution 2:
   // Combine the statements that make up the body of
   // the lambda expression into a single statement.
   [](int x) { return x * 2; } (5);
}

См. также

Лямбда-выражения