다음을 통해 공유


컴파일러 오류 C3489

기본 캡처 모드가 값 방식인 경우 'var'이 필요합니다.

람다 식에 대한 기본 캡처 모드를 값 방식으로 지정할 경우 해당 식의 캡처 절에 변수를 값으로 전달할 수 없습니다.

이 오류를 해결하려면

  • 변수를 캡처 절에 명시적으로 전달하지 마세요. 또는

  • 값 방식을 기본 캡처 모드로 지정하지 마세요. 또는

  • 참조 방식을 기본 캡처 모드로 지정합니다. 또는

  • 변수를 캡처 절에 참조로 전달합니다. 이 경우 람다 식의 동작이 변경될 수 있습니다.

예제

다음 예제에서는 기본 모드가 값 방식인 람다 식의 캡처 절에 n 변수가 값으로 나타나기 때문에 C3489를 생성합니다.

// C3489a.cpp

int main()
{
   int n = 5;
   [=, n]() { return n; } (); // C3489
}

다음 예제에서는 C3489에 대한 네 가지 해결 방법을 보여 줍니다.

// C3489b.cpp

int main()
{
   int n = 5;

   // Possible resolution 1:
   // Do not explicitly pass n to the capture clause.
   [=]() { return n; } ();

   // Possible resolution 2:
   // Do not specify by-value as the default capture mode.
   [n]() { return n; } ();

   // Possible resolution 3:
   // Specify by-reference as the default capture mode.
   [&, n]() { return n; } ();

   // Possible resolution 4:
   // Pass n by reference to the capture clause.
   [&n]() { return n; } ();
}

참고 항목

람다 식