다음을 통해 공유


컴파일러 오류 C3849

'type' 형식의 식에서 함수 형식을 호출할 때 모든 number이(가) 사용 가능한 연산자 오버로드에 대해 const 및/또는 volatile 한정자가 손실됩니다.

지정된 const-volatile 형식의 변수는 동일하거나 더 큰 const-volatile 한정으로 정의된 멤버 함수만 호출할 수 있습니다.

이 오류를 해결하려면 적절한 멤버 함수를 제공합니다. 변환으로 인해 정규화가 손실되는 경우 const 또는 volatile 정규화된 개체에서 변환을 실행할 수 없습니다. 한정자를 얻을 수 있지만 변환에서 한정자를 잃을 수는 없습니다.

다음 샘플에서는 C3849를 생성합니다.

// C3849.cpp
void glbFunc3(int i, char c)
{
   i;
}
typedef void (* pFunc3)(int, char);

void glbFunc2(int i)
{
   i;
}

typedef void (* pFunc2)(int);

void glbFunc1()
{
}
typedef void (* pFunc1)();

struct S4
{
   operator ()(int i)
   {
      i;
   }

   operator pFunc1() const
   {
      return &glbFunc1;
   }

   operator pFunc2() volatile
   {
      return &glbFunc2;
   }

   operator pFunc3()
   {
      return &glbFunc3;
   }

   // operator pFunc1() const volatile
   // {
   //    return &glbFunc1;
   // }
};

int main()
{
   // Cannot call any of the 4 overloads of "operator ()(.....)" and
   // "operator pFunc()" because none is declared as "const volatile"
   const volatile S4 s4;  // can only call cv member functions of S4
   s4();   // C3849 to resolve, uncomment member function
}