Kompilatorfel C3849

funktionen-liknande anrop på ett uttryck av typen "typ" skulle förlora const och/eller volatile kvalificerare för alla tillgängliga operatörsöverlagringar

Anmärkningar

En variabel med en angiven beständig typ kan bara anropa medlemsfunktioner som definierats med samma eller större beständiga kvalifikationer.

Åtgärda det här felet genom att ange en lämplig medlemsfunktion. Du kan inte köra en konvertering på ett beständigt eller flyktigt kvalificerat objekt när konverteringen orsakar förlust av kvalificering. Du kan erhålla kvalifikationer men du kan inte förlora kvalifikationer i en konvertering.

Example

Följande exempel genererar 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
}